将重复的行标签转换为熊猫中的列标题

时间:2020-07-30 02:26:43

标签: python pandas

我有这种格式的调查表

import pandas as pd
df = pd.DataFrame({'Question': ['Name', 'Age', 'Income','Name', 'Age', 'Income'], 
                   'Answer': ['Bob', 50, 42000, 'Michelle', 42, 62000]})

如您所见,相同的“问题”反复出现,我需要重新设置格式,以便结果如下

df2 = pd.DataFrame({'Name': ['Bob', 'Michelle'], 
                   'Age': [ 50, 42],
                   'Income': [42000,62000]})

3 个答案:

答案 0 :(得分:2)

使用Uniform[0, 7]

numpy.reshape

或转置和print (pd.DataFrame(df["Answer"].to_numpy().reshape((2,-1)), columns=df["Question"][:3]))

pd.concat

两者的结果相同:

s = df.set_index("Question").T

print (pd.concat([s.iloc[:, n:n+3] for n in range(0, len(s.columns), 3)]).reset_index(drop=True))

答案 1 :(得分:2)

  1. 您可以使用group.assign使用.groupby创建新列.cumcount(Bob是第一组,Michelle将在第二组,而根据{{​​1}},NameAge)的重复来确定组)
  2. 然后Income索引为.pivot的datraframe。

代码:

group

答案 2 :(得分:1)

这是一个解决方案!假设每个观察结果都有偶数个名称(鲍勃和米歇尔分别为3列):

import pandas as pd
df = pd.DataFrame({'Question': ['Name', 'Age', 'Income','Name', 'Age', 'Income'], 
                   'Answer': ['Bob', 50, 42000, 'Michelle', 42, 62000]})

df=df.set_index("Question")
pd.concat([df.iloc[i:i+3,:].transpose() for i in range(0,len(df),3)],axis=0).reset_index(drop=True)