将多个csv列合并为一个,同时重复标题

时间:2018-04-19 00:15:36

标签: python-3.x pandas csv

我正在尝试将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)

3 个答案:

答案 0 :(得分:2)

使用ravelrepeat

构建
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)以获得更好的答案。