行在 pandas DataFrame 中连接 -新版本

rows concatenate in pandas dataframe -new version

提问人:Romeo Gherasim 提问时间:4/27/2023 更新时间:4/27/2023 访问量:31

问:

我有下表。

import pandas as pd
# Define the input data
data = {
    'ID': [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3],
    'count': [1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,1,1,1,1,2,2,1,1,1,1,2],
    'priority': [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,4,3,1,2,3,4,4],
    'item': ['A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','D','C','A','B','C','D','D'],
    'c': ['XX','XX','XX','XX','YY-SS','YY','YY','YY','YY-SS','YY','YY','YY','XX','XX','XX','XX','ZZ','ZZ','ZZ','ZZ','ZZ','ZZ','TT-SS','ZZ','ZZ','ZZ','ZZ']
}

# Convert the input data to a Pandas DataFrame
df = pd.DataFrame(data)

enter image description here

我需要转换此输入,如下面的输出示例所示:在此处输入图像描述enter image description here

如果您有任何想法,请分享。谢谢!

Pandas DataFrame 串联 数据操作

评论

0赞 mozway 4/27/2023
你能用语言解释一下逻辑,避免我们猜测吗?
1赞 Quang Hoang 4/27/2023
按优先级排序,groupby([id,count]),连接项目和组内的第一个?c
0赞 Romeo Gherasim 4/27/2023
串联必须基于 3 个变量 count、priority、item/ 进行,对于优先级变量,还需要排序
0赞 mozway 4/27/2023
@QuangHoang这也是我的猜测,但 OP 应该更好地明确这一点
1赞 Romeo Gherasim 4/27/2023
是的,第一个

答:

2赞 mozway 4/27/2023 #1

您可以使用自定义 groupby.agg

out = (df
   .sort_values(by='priority') # optional
   .groupby(['ID', 'count'], as_index=False)
   .agg({'item': '-'.join, 'c': 'first'})
   .assign(FINAL=lambda d: d.pop('item')+'-'+d.pop('c'))
   .drop(columns='count')
)

输出:

   ID          FINAL
0   1     A-B-C-D-XX
1   1  A-B-C-D-YY-SS
2   1  A-B-C-D-YY-SS
3   1     A-B-C-D-XX
4   2     A-B-C-D-ZZ
5   2         D-C-ZZ
6   3  A-B-C-D-TT-SS
7   3           D-ZZ