python - 添加两个数据框,但只有少数选定的列,并且仅当其他列值相同时
问题描述
我有两个数据框。
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
谢谢!
解决方案
使用 concat 将它们合并在一起,然后使用groupby
withsum()
作为聚合方法
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
推荐阅读
- python - Python 元组中的类型提示
- c - 在 C 中复制文件内容
- firebase - 我无法将我的 Flutter Web 应用程序连接到 Firebase,它显示“web_entrypoint.dart”并卡在白屏中
- node.js - 如何访问我的 /api/v1/campaigns?我似乎根本无法访问它
- c++ - 关于链接器和多类声明的 C++ 问题
- python - python中的子进程不产生输出
- python - 无论选项卡是否打开,我如何才能运行此代码?
- android - onCallAdded的回调如何获取当前设备的电话号码和SIM卡槽?
- git - Git 合并请求和分支策略
- python - PyMySQL:- OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection denied)")