Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何合并和计算两个数据帧?_Python_Pandas_Dataframe - Fatal编程技术网

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