我需要根据第二个数据帧的属性向现有熊猫数据帧添加一列。我举了一个简单的例子来说明我的确切要求。
我有两个数据帧,一个表示成对的名称,另一个表示两个个体之间的交互:
>>> names
id_a id_b
0 ben jack
1 jack ben
2 jill amir
3 wilma jill
4 amir wilma
>>> interactions
individual1 individual2
0 jill jack
1 jack jill
2 wilma jill
3 amir jill
4 amir jack
5 jack amir
6 jill amir
我需要的基本上是:对于
names
,我需要计算这两个名称之间的交互次数
interactions
在哪儿
names['id_a']
要么是
interactions['individual1']
或
interactions['individual2']
以及
names['id_b']
要么是
交互['individual1']
或
交互['individual2']
. 此计数需要包含在列中
num_interactions
对于名称中的所有行,即使名称重复(即,如果有一行id\u a是ben,id\u b是jack,而有一行这些名称是颠倒的(id\u a是jack,id\u b是ben),这两行都应包含num\u交互)
生成的数据帧如下所示:
>>> names
id_a id_b num_interactions
0 ben jack 0.0
1 jack ben 0.0
2 jill amir 2.0
3 wilma jill 1.0
4 amir wilma 0.0
enter code here
我所做的一切
这很好用,但很难看,很难读,效率很低,我知道一定有更好的方法!也许是某种形式的合并,但我真的不知道它如何适用于复杂的标准。。。
for i in range(len(names)):
names.loc[i, 'num_interactions'] = len(
interactions[((interactions['individual1'] == names.loc[i, 'id_a']) &
(interactions['individual2'] == names.loc[i, 'id_b'])) |
((interactions['individual2'] == names.loc[i, 'id_a']) &
(interactions['individual1'] == names.loc[i, 'id_b']))
])
复制示例数据帧
如果您想处理这个问题,可以使用它来复制上面的虚拟数据帧。
import pandas as pd
names = pd.DataFrame(data={'id_a': ['ben', 'jack', 'jill', 'wilma', 'amir'],
'id_b': ['jack', 'ben', 'amir', 'jill', 'wilma']})
interactions = pd.DataFrame(data={'individual1': ['jill', 'jack',
'wilma', 'amir',
'amir', 'jack', 'jill'],
'individual2': ['jack', 'jill', 'jill',
'jill', 'jack', 'amir',
'amir']})
提前感谢!