python - 如何使用包含列表值的列将多个 DataFrame 行合并为 1

标签 python pandas list dataframe data-manipulation

我有一个像这样的 DataFrame:

| cat0  | cat1 | cat2 | col_list  | Quantity |
| ----- | ---- | ---- | ----------| -------- |
| alpha | x    | a    | [a,b,c,d] | 4        |
| alpha | y    | a    | [e]       | 1        |
| beta  | z    | a    | [f,g]     | 2        |
| gamma | p    | b    | [h]       | 1        |
| gamma | q    | b    | [I,j,k,l] | 4        |
| phi   | r    | c    | [r,s]     | 2        |
| eita  | s    | c    | [m,n]     | 2        |

我希望它根据 cat2 列对其进行转换。如果它们具有相同的值,则将这些行合并为 1 并像这样合并行:

| cat0       | cat1  | cat2 | col_list        | Quantity |
| ---------- | ----- | ---- | ----------------| -------- |
| alpha,beta | x,y,z | a    | [a,b,c,d,e,f,g] | 7        |
| gamma      | p,q   | b    | [h,I,j,k,l]     | 5        |
| phi,eita   | r,s   | c    | [r,s,m,n]       | 4        |

如果列有字符串值(列:cat0,cat1),则用逗号连接和分隔它们。如果它有列表值(列“col_list”),则将这些元素添加到单个列表中。如果它是一个 int 值(列:Quantity),则只需添加它们。

最佳答案

您可以使用 groupby.agg , 与 list/','.join, sum, 或 itertools.chain :

from itertools import chain

(df
 .groupby('cat2', as_index=False)
 .agg({'cat0': ','.join, 'cat1': ','.join,
       'col_list': lambda x: list(chain.from_iterable(x)),
       'Quantity': 'sum'
       })
 [df.columns] # reindex like original
)

注意。 in place 或 chain,您还可以使用:lambda x: [v for l in x for x in l]

输出:

               cat0   cat1 cat2               col_list  Quantity
0  alpha,alpha,beta  x,y,z    a  [a, b, c, d, e, f, g]         7
1       gamma,gamma    p,q    b        [h, I, j, k, l]         5
2          phi,eita    r,s    c           [r, s, m, n]         4

关于python - 如何使用包含列表值的列将多个 DataFrame 行合并为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73062256/

相关文章:

python - 为什么 !!在 Python 中运行命令,但将输出括在括号中

python - Pytorch 升级后,我的模型几乎给出了随机输出

python - 将键列表转换为嵌套字典

python - 在Azure中使用python获取角色分配列表

python-3.x - 单列热编码

python - 如何在 tabula-py 中设置页面范围?

java - 播放列表随机播放开/关

python - Pandas 替换数据帧时间序列中的值

list - flutter 。 Dart 。 Flutter - 替换列表中的项目

python - 如何在Python中对列表进行分组?