在group by子句之后创建数据框

时间:2015-10-02 02:55:22

标签: pandas preserve

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

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

1 个答案:

答案 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