嗨,我有data set
一对多的关系。我想将concatenating
每列的不同值
以下是一个例子:
我有一个名为Customer
和Product Affiliation (PA)
的数据集。一个customer
可以multiple PA
有不同的时间。
这是输入:
╔════════╦═══════╦══════╦══════╗
║ Cust ║PA1 ║ PA2 ║ PA3 ║
╠════════╬═══════╬══════╬══════╣
║ A ║ H ║ M ║ L ║
║ A ║ H ║ L ║ M ║
║ A ║ H ║ M ║ H ║
╚════════╩═══════╩══════╩══════╝
期望的输出:
╔════════╦══════╦══════════╦═══════╗
║ Cust ║ PA1 ║ PA2 ║ PA3 ║
╠════════╬══════╬══════════╬═══════╣
║ A ║ H ║ M&L ║ L&M&H ║
╚════════╩══════╩══════════╩═══════╝
我有多个PA列。我想知道是否有可以应用的通用蟒蛇熊猫代码 谢谢 明克
答案 0 :(得分:0)
以下是示例数据的略微扩展版本,以便更清楚地了解代码如何在组而不是整个数据框上运行:
df = pd.DataFrame({ 'Cust':list('AAABBB'),'PA1':list('HHHMMH'),
'PA2': list('MLMMMM'),'PA3':[1,2,3,3,3,1] })
Cust PA1 PA2 PA3
0 A H M 1
1 A H L 2
2 A H M 3
3 B M M 3
4 B M M 3
5 B H M 1
第一步是创建一个每个客户一行的新数据框。这只是一种快速而肮脏的方法,对于手边的示例来说很好,但是您可能希望以不同的方式执行此操作,具体取决于您要对其他任何列执行的操作。
df2 = df.groupby('Cust').sum()
PA1 PA2 PA3
Cust
A HHH MLM 123
B MMH MMM 331
将其作为所需输出的模板,我们可以循环遍历原始数据框的相关列,并使用groupby/apply
和join/unique
替换现有列中的值:
for col in ['PA1','PA2','PA3']:
df2[col] = df.groupby('Cust')[col].apply( lambda x:
'&'.join( x.astype(str).unique() ))
PA1 PA2 PA3
Cust
A H M&L 1&2&3
B M&H M 3&1