添加两个数据框,但仅添加几个选定的列,并且仅当其他列的值相同时

时间:2019-04-30 18:49:12

标签: python pandas

我有两个数据框。

df1的索引为:strintfloat1

Sun, 1, 0.121
Sun, 2, 0.123

df2的索引为:strintfloat1

Sun, 1, 0.5
Sun, 2, 0.6

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

df3应该看起来像

Sun, 1, 0.621
Sun, 2, 0.723

谢谢!

2 个答案:

答案 0 :(得分:4)

使用concat将它们合并在一起,然后将sum()groupby结合使用

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

答案 1 :(得分:3)

使用:

df = pd.concat([df1,df2]).groupby(['col_str', 'col_int'], as_index=False).sum()

print(df)
  col_str  col_int  col_float1
0     Sun        1       0.621
1     Sun        2       0.723