我有两个数据框。
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的索引为str,int,float1的df3。
df3应该看起来像
Sun, 1, 0.621
Sun, 2, 0.723
谢谢!
答案 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