Pandas Dataframe - 如何将多行合并为一行

时间:2015-12-25 22:05:10

标签: python pandas

我有一个表格中的数据集:

    A            B
0  30  60538815980
1  30   7410811099
2  26   2238403510
3  26   2006613744
4  26   2006618783
5  26   2006613743

我希望将A的值匹配的行组合起来并生成类似

的行
            C_1         C_2         C_3         C_4
A                                                  
26   2238403510  2006613744  2006618783  2006613743
30  60538815980  7410811099         NaN         NaN

我尝试用加入或合并表达它但到目前为止失败了。有没有简单的方法来表达或者我是否必须使用apply并创建一个新的DataFrame?

2 个答案:

答案 0 :(得分:3)

首先,根据列groupby创建一个A对象。然后创建一个新的数据框df2,使用ix根据列B中的值n为每个组的列A编制索引。设置此数据框的索引等于groupby中的键值(即列A中的唯一值)。

最后,使用列表推导将新列值设置为C_1C_2,...等等。

df = pd.DataFrame({'A': [30, 30, 26, 26, 26, 26], 
                   'B': [60538815980, 7410811099, 2238403510, 
                         2006613744, 2006618783, 2006613743]})

gb = df.groupby('A')
df2 = pd.DataFrame([df.ix[gb.groups[n], 'B'].values for n in gb.groups], 
                   index=gb.groups.keys())
df2.columns = ["C_" + str(i + 1) for i in df2.columns]
df2.index.name = "A"

>>> df2
            C_1         C_2         C_3         C_4
A
26   2238403510  2006613744  2006618783  2006613743
30  60538815980  7410811099         NaN         NaN

答案 1 :(得分:2)

我还建议使用groupby,但我认为我们可以使用pivot来简化操作。首先,我们使用我们要使用的列标签创建一个新的C列,然后我们调用pivot

>>> df["C"] = "C_" + (df.groupby("A").cumcount() + 1).astype(str)
>>> df.pivot(index="A", values="B", columns="C")
C           C_1         C_2         C_3         C_4
A                                                  
26   2238403510  2006613744  2006618783  2006613743
30  60538815980  7410811099         NaN         NaN