python - 合并 Pandas 中的 2 个数据帧 : join on some columns, 总结其他

标签 python pandas

我想合并特定列 (key1, key2) 上的两个数据框,并求和另一列 (value) 的值。

>>> df1 = pd.DataFrame({'key1': range(4), 'key2': range(4), 'value': range(4)})
   key1  key2  value
0     0     0      0
1     1     1      1
2     2     2      2
3     3     3      3

>>> df2 = pd.DataFrame({'key1': range(2, 6), 'key2': range(2, 6), 'noise': range(2, 6), 'value': range(10, 14)})
   key1  key2  noise  value
0     2     2      2     10
1     3     3      3     11
2     4     4      4     12
3     5     5      5     13

我想要这样的结果:

   key1  key2  value
0     0     0      0
1     1     1      1
2     2     2     12
3     3     3     14
4     4     4     12
5     5     5     13

在 SQL 术语中,我想要:

SELECT df1.key1, df1.key2, df1.value + df2.value AS value
FROM df1 OUTER JOIN df2 ON key1, key2

我尝试了两种方法:

方法一

concatenated = pd.concat([df1, df2])
grouped = concatenated.groupby(['key1', 'key2'], as_index=False)
summed = grouped.agg(np.sum)
result = summed[['key1', 'key2', 'value']]

方法二

joined = pd.merge(df1, df2, how='outer', on=['key1', 'key2'], suffixes=['_1', '_2'])
joined = joined.fillna(0.0)
joined['value'] = joined['value_1'] + joined['value_2']
result = joined[['key1', 'key2', 'value']]

两种方法都给出了我想要的结果,但我想知道是否有更简单的方法。

最佳答案

我不知道更简单,但你可以更简洁一点:

>>> pd.concat([df1, df2]).groupby(["key1", "key2"], as_index=False)["value"].sum()
   key1  key2  value
0     0     0      0
1     1     1      1
2     2     2     12
3     3     3     14
4     4     4     12
5     5     5     13

根据您对链接操作的容忍度,无论如何您可能希望将其分成多行(四行往往接近我的上限,在本例中为 concat-groupby-select-sum)。

关于python - 合并 Pandas 中的 2 个数据帧 : join on some columns, 总结其他,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16583668/

相关文章:

python - Kivy:如何让外部库工作?

python - Tensorflow:高效地将数据移动/放入 GPU

python - 如何从 Excel 工作表中提取日期?

python - 将一行除以具有相同日期时间的所有其他行的平均值

python - 将 Pandas 系列作为一行添加到 Pandas DataFrame

python - 计算整个 Pandas DataFrame 的出现次数

python - Pandas :减去两个数据帧时所有NaN

python - pipenv shell在虚拟环境中启动子shell… 'powershell.exe'无法识别为内部或外部命令,可操作程序或

python - 将 2 列类似计数器的 csv 文件转换为 Python collections.Counter?

python - 如何在 Python/Windows10 上使用 FFMPEG 和 Pipe 进行屏幕录制?