我正在尝试将csv中的多个列合并为一个列,每个原始列的标题都会重复,如下所示。
userA userB
A1 B1
A2 B2
A2 B3
A2 B4
进入这个:
userA A1
userA A2
userA A3
userA A4
userB B1
userB B2
userB B3
userB B4
有没有人对如何做到这一点有任何建议。我确实有一些熊猫的经验,但我现在不知所措。
更新:我找到了如何合并列
df = pd.read_csv(filename, sep='\t')
df = df.combine_first(pd.Series(df.values.ravel('F')).to_frame('merged'))
最终更新:使用melt()
解决df = pd.melt(df)
答案 0 :(得分:2)
ravel
和repeat
pd.Series(df.values.ravel(), df.columns.repeat(len(df)))
userA A1
userA B1
userA A2
userA B2
userB A2
userB B3
userB A2
userB B4
dtype: object
答案 1 :(得分:2)
您可以使用melt
df.melt()
Out[702]:
variable value
0 userA A1
1 userA A2
2 userA A2
3 userA A2
4 userB B1
5 userB B2
6 userB B3
7 userB B4
答案 2 :(得分:1)
首先使用:
解决只有这两列的数据框,你可以做到 df.stack()。reset_index(level = 1) - cmaher
按照简单的排序顺序排序:
df.sort_values(by=[0])
请参阅上面的pd.melt(df)以获得更好的答案。