我尝试重复数据集并将重复数据删除数据集转换为另一个数据框。但是,重复数据集的第一列按变量分组
import pandas as pd
df = pd.DataFrame({ 'Cust':list('AAABBB'),'Dt':list('XXYYZZ'),'PA1':list('HHHMMH'),
'PA2': list('MLMMMM'),'PA3':[1,2,3,3,3,1] })
df2 = df.groupby('[Cust','Dt'], as_index=False).sum()
for col in ['PA1','PA2','PA3']:
df2[col] = df.groupby(['Cust','Dt'],as_index=False)[col].apply( lambda x:
'&'.join( x.astype(str).unique() ))
这给了我错误 引发TypeError('插入列的不兼容索引'
TypeError:带有帧索引的插入列的不兼容索引
我希望将输出复制到另一个数据框(df3)以显示为 (保留原始日期的列顺序-df) 原因是需要将重复数据删除的数据元素加载到数据库,并且原始(和数据库模式)和重复数据集的布局(列顺序)应该相同。
Cust Dt PA1 PA2 PA3
A X 1&2&3 H M&L
B Y 3&1 M&H M
由于 PMV
答案 0 :(得分:0)
最简单的方法是使用as_index = False,然后重新索引:
df3 = df.groupby('Cust', as_index=False).sum()
for col in ['PA1','PA2','PA3']:
df3[col] = df.groupby('Cust', as_index=False)[col].apply( lambda x:
'&'.join( x.astype(str).unique() ))
In [11]: df3
Out[11]:
Cust PA3 PA1 PA2
0 A 1&2&3 H M&L
1 B 3&1 M&H M
In [12]: df3.reindex_axis(df.columns, axis=1)
Out[12]:
Cust PA1 PA2 PA3
0 A H M&L 1&2&3
1 B M&H M 3&1
如果您将带有Cust的DataFrame作为索引,则可以改为reset_index
:
In [21]: df2.reset_index().reindex_axis(df.columns, axis=1)
Out[21]:
Cust PA1 PA2 PA3
0 A H M&L 1&2&3
1 B M&H M 3&1