首页 > 解决方案 > 添加两个数据框,但只有少数选定的列,并且仅当其他列值相同时

问题描述

我有两个数据框。

df1 有索引:str, int,float1

Sun, 1, 0.121
Sun, 2, 0.123

df2 有索引:str, int,float1

Sun, 1, 0.5
Sun, 2, 0.6

我必须通过将 df1 和 df2 的 float1 列添加在一起,同时确保我添加的两行具有相同的 str 和 int 值,从 df1 和 df3 创建具有索引的 df3:str、int、float1。

df3 应该看起来像

Sun, 1, 0.621
Sun, 2, 0.723

谢谢!

标签: pythonpandas

解决方案


使用 concat 将它们合并在一起,然后使用groupbywithsum()作为聚合方法

df1 = pd.DataFrame([['Sun', 1, 0.121],['Sun', 2, 0.123]])
df2 = pd.DataFrame([['Sun', 1, 0.5],['Sun', 2, 0.6]])

df = pd.concat([df1, df2])
print(df)
#      0  1      2
# 0  Sun  1  0.121
# 1  Sun  2  0.123
# 0  Sun  1  0.500
# 1  Sun  2  0.600

print(df.groupby([0, 1], as_index=False).sum())
#      0  1      2
# 0  Sun  1  0.621
# 1  Sun  2  0.723

通过df.groupby()传递要用于分组的列和顺序来工作。在这种情况下,我没有列名,所以我传递了整数来指示列位置。该as_index参数将告诉它不要尝试使用分组列重新索引数据框。将df.groupby()返回一个DataFrameGroupBy对象。通过将其传递给.sum()函数,它将返回一个包含您正在寻找的结果的数据框。

gb = df.groupby([0, 1], as_index=False)
print(gb)
# <pandas.core.groupby.groupby.DataFrameGroupBy object at 0x000000000109A4A8>

print(gb.sum())
#      0  1      2
# 0  Sun  1  0.621
# 1  Sun  2  0.723

print(gb.mean())
#      0  1       2
# 0  Sun  1  0.3105
# 1  Sun  2  0.3615

推荐阅读