python - Pandas 根据第二个数据框中的分组对行进行分组
问题描述
我一直在研究一个困扰我一段时间的问题。
一个简短的解释是我有两个数据框 df1 和 df2。df1 包含由单个字符串组成的列 x 和由值组成的列 y。
df2 是包含字符串的单列。这些与 df1 列 x 相同,但其中一些被分组为字符串,但由分号“;”分隔。
我想要做的是创建另一个数据框,它采用 df1 并总结 y 列中的值,以生成“结果”数据框。
在 Pandas 中是否有一种简单的方法可以做到这一点?
谢谢你。
df1
x y
0 'a' 5
1 'b' 4
2 'c' 9
3 'd' 1
4 'e' 3
5 'f' 3
6 'g' 4
7 'h' 5
8 'i' 6
9 'j' 6
10 'k' 9
df2
group
0 'a'
1 'b;h;d'
2 'e'
3 'f'
4 'g;c;i'
5 'j'
6 'k'
Result
group y
0 'a' 5
1 'b;h;d' 10
2 'e' 3
3 'f' 3
4 'g;c;i' 19
5 'j' 6
6 'k' 9
解决方案
尝试:
df2 = df2.reset_index()
df2.group = df2.group.str.split(";")
df2 = df2.explode("group").merge(df1, left_on="group", right_on="x", how="left")
out = (
df2.groupby("index")
.agg({"x": ";".join, "y": "sum"})
.rename(columns={"x": "group"})
.reset_index(drop=True)
)
print(out)
印刷:
group y
0 a 5
1 b;h;d 10
2 e 3
3 f 3
4 g;c;i 19
5 j 6
6 k 9
推荐阅读
- python - 正则表达式仅捕获一组或另一组,而不是两者
- npm - npm install --save solc 在 Atom 上
- rest - camel 3.8 两次生成 REST 路由
- html - 带有自定义图标的 cfcontent
- c++ - 如何在Visual Studio的调试监视窗口中获取变量的全部内容
- r - 将单个数据向量扩展为多列数据框
- delphi - 如何在 Delphi 的 TStringGrid 中选择然后删除单元格?
- vim - vim 编辑模式 - 如何打开文件并转到行号
- python - pip install 后的 ModuleNotFoundError 。(自定义模块)
- pandas - Pandas 遍历行和条件计数