我正在使用两个
DataFrames
,定义如下:
import pandas as pd
df1 = pd.DataFrame([[1, 'a', 0.95], [2, 'b', 0.92], [3, 'c', 0.91]], columns=['id','value','similarity'])
df2 = pd.DataFrame([[3, 'c', 0.93], [4, 'd', 0.92], [5, 'e', 0.99]], columns=['id','value','similarity'])
df1
id name similarity
1 a 0.95
2 b 0.92
3 c 0.91
df2
id name similarity
3 c 0.93
4 d 0.92
5 e 0.99
我现在想通过键属性
DataFrames
组合两个 id
,同时避免在 NaN
列中创建 name
。为此,我使用pd.combine_first
,如这个答案中的建议,得到这个:
df3 = df1.set_index('id').combine_first(df2.set_index('id'))
df3
id name similarity
1 a 0.95
2 b 0.92
3 c 0.91
4 d 0.92
5 e 0.99
但是,我还有一个额外的要求。当两个集合上都存在
similarity
值时,我想将它们的平均值作为新值。例如,我想要的输出是这样的:
id name similarity
1 a 0.95
2 b 0.92
3 c 0.92 <-- (0.91 + 0.93 / 2)
4 d 0.92
5 e 0.99
最好使用
pandas
或 numpy
,当两个 DataFrames 都有值时,我如何平均相似度?
concat
,然后groupby.mean
:
out = pd.concat([df1, df2]).groupby(['id', 'value'], as_index=False).mean()
输出:
id value similarity
0 1 a 0.95
1 2 b 0.92
2 3 c 0.92
3 4 d 0.92
4 5 e 0.99