Pandas long to Wide /将多行转换为一个单元格

时间:2015-09-18 20:33:46

标签: python python-2.7 pandas

我的数据看起来像这样

Name     Title     ID
ED       HHH     11111
ED       HHH     11112
ED       HHH     11113
ED       HHH     11114
AD       BBB     11119
AD       BBB     11133

我希望它看起来像这样(例如,所有ID都在一个单元格中,以逗号分隔)

Name     Title     ID
ED       HHH     11111, 11112, 11113, 11114
AD       BBB     11119, 11133

所以我尝试了一些不同的熊猫选项,但似乎大多数人会尝试将ID放在我不想要的列中。

我还合并了NamesTitle字段,并尝试了下面的代码,但我得到'无法使用空键标记索引',我不确定此选项是否可以正常工作。

df_long.pivot(index='Combined', values='ID')

我也是这样尝试(下图),但它花了6个多小时(150万行)并且仍然没有完成,当可能有更好的方法时,这并不是理想的表现。

for x in df.values:
for y in df1_list:
    if x[2] == y[2]:
        if x[3] == y[3]:
            if x[4] not in y[4]:
                y[4].append(x[4])

我的问题的任何想法或方向使用熊猫或熊猫以外的其他解决方案?

1 个答案:

答案 0 :(得分:1)

这展示了如何使用lambda在pandas中将多个单元连接在一起: Combine two columns of text in dataframe in pandas/python

它可以在pd.pivot_tableimport numpy as np import pandas as pd from pandas import Series, DataFrame # here i copied your data frame and assign it to the variable "df" df = pd.read_clipboard() df['ID'] = df['ID'].astype('str') pd.pivot_table(df,index=['Name','Title'],values='ID',aggfunc=lambda x: ', '.join(x)) Out[15]: Name Title AD BBB 11119, 11133 ED HHH 11111, 11112, 11113, 11114 Name: ID, dtype: object 参数中使用,如下所示:

fail()

您可能必须事后对索引进行排序;看起来熊猫选择的方式与您展示的输出方式不同。