我有这种格式的调查表
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]})
答案 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)
group
和.assign
使用.groupby
创建新列.cumcount
(Bob是第一组,Michelle将在第二组,而根据{{1}},Name
和Age
)的重复来确定组)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)