Python 熊猫数据帧-如何将多行合并为一行
我有一个以下格式的数据集:Python 熊猫数据帧-如何将多行合并为一行,python,pandas,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
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
我试着用join或merge来表达它,但到目前为止都失败了。有没有简单的方法来表达这一点,或者我必须使用apply并创建一个新的数据帧?首先,基于列
a
创建一个groupby
对象。然后创建一个新的数据帧df2
,它使用ix
根据列a
中的值n
对每组的列B
进行索引。将此数据帧的索引设置为与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
我还建议使用
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