Python 如何合并和计算两个数据帧?
正在寻找合并以下两个数据帧的帮助Python 如何合并和计算两个数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,正在寻找合并以下两个数据帧的帮助 df1: key mean stddev --- ----- ------- key1 30 3 key2 40 4 key3 50 5 df2: key mean stddev --- ----- ------- key2 70 7 key3 80 8 key4 90
df1:
key mean stddev
--- ----- -------
key1 30 3
key2 40 4
key3 50 5
df2:
key mean stddev
--- ----- -------
key2 70 7
key3 80 8
key4 90 9
需要合并上述两个数据帧以产生三种不同的结果:
1. Rows that are in df1 but not in df2:
key mean stddev
--- ----- -------
key1 30 3
2. Rows that are in both df1 and df2 (please see the new columns delta_mean(difference of mean), delta_stddev (difference of stddev)
key mean_x stddev mean_y stddev_y delta_mean delta_stddev
--- ----- ------- ------ -------- --------- -----------
key2 40 4 70 7 30 3
key3 50 5 80 8 30 3
此外,我想按delta_平均值对其进行排序
3. Rows that are in df2 but but not not in df1
key mean stddev
--- ----- -------
key4 90 9
在第一个和第三个所需输出中,您可以简单地从当前数据帧中筛选另一个数据帧中不存在的键。您需要在第二个选项中进行合并: 1。在df1中但不在df2中的行:
df1[~df1.key.isin(df2.key)]
2。df1和df2中的行
df1.merge(df2,on='key')
3。在df2中但不在df1中的行
df2[~df2.key.isin(df1.key)]
这回答了你的问题吗?在第二种情况下,有额外的列用于计算两个数据帧的平均值和stddev之间的差异。有没有办法在合并操作期间添加这些附加列?您的意思是有其他列要合并?如果是这样,您可以使用
df1.merge(df2,on=['key1','key2','key'3])
等等…否。结果应该有额外的列。仔细想想,我发现:df['delta\u-mean']=df['mean\u-x']-df['mean\u-y']
。不知道这是否也可以在合并阶段完成。据我所知,熊猫合并功能不提供这样的功能。作为一种可能的方法,您可以使用common_keys=df1.key[df1.key.isin(df2.key)]
获取公共键,然后使用df1.set_index('key').reindex(common_keys)-df2.set_index('key').reindex(common_keys)
计算公共列中的值。
key mean stddev
0 key1 30 3
key mean_x stddev_x mean_y stddev_y
0 key2 40 4 70 7
1 key3 50 5 80 8
key mean stddev
2 key4 90 9