假设您有一个带有“id”列和一列值的数据框:
df1 = pd.DataFrame({'id': ['a','b','c'],'vals': [1,2,3]})
df1
id vals
0 a 1
1 b 2
2 c 3
您还有一个系列,其中包含与 df1 中的值对应的“id”值列表:
df2 = pd.Series([['b',['a','b']])
df2
id
0 [b,c]
1 [a,c]
2 [a,b]
现在,您需要一种计算效率高的方法,使用 df2 中的相应 id 计算 df1 中“vals”列的平均值,并在 df1 中创建一个新列。例如,对于第一行 (index=0),我们将取 df1 中 id“b”和“c”值的平均值(因为这些是 df2 中 index=0 的 id 值):
id vals avg_vals
0 a 1 2.5
1 b 2 2.0
2 c 3 1.5
你可以这样做:
df1['avg_vals'] = df2.apply(lambda x: df1.loc[df1['id'].isin(x),'vals'].mean())
df1
id vals avg_vals
0 a 1 2.5
1 b 2 2.0
2 c 3 1.5
...但假设它对您的目的来说太慢了。也就是说,如果可能的话,我需要一些计算效率更高的东西!提前感谢您的帮助。