1

我正在尝试对数据集进行重复数据删除并将重复数据删除数据集转换为另一个数据框。但是,重复数据集的第一列是按变量分组

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:插入列的索引与框架索引不兼容

我希望将输出复制到另一个数据框(df3)显示为(保留原始日期的列顺序 - df)原因是重复数据元素需要加载到数据库和原始的布局(列顺序)(和数据库架构)和重复数据集应该相同。

Cust Dt     PA1    PA2  PA3
A    X    1&2&3    H    M&L
B    Y    3&1     M&H    M

谢谢 PMV

4

1 回答 1

1

最简单的方法是使用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
于 2015-10-02T03:14:46.430 回答