首页 > 解决方案 > 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
    

标签: pythonpandasdataframe

解决方案


尝试:

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

推荐阅读