我有一个表格中的数据集:
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?
答案 0 :(得分:3)
首先,根据列groupby
创建一个A
对象。然后创建一个新的数据框df2
,使用ix
根据列B
中的值n
为每个组的列A
编制索引。设置此数据框的索引等于groupby
中的键值(即列A
中的唯一值)。
最后,使用列表推导将新列值设置为C_1
,C_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