我有一个Pandas DataFrame,具有: '''
1st column = subject_id,
2nd column = voxel_type (categorical; T, P, or C),
3rd to 10th columns = floats
''' 由于每个主题都有多行,因此我想将它们全部折叠成一行,每个主题只保留一行。 我的第一个想法是使用groupby,正如SO上的其他问题所建议的那样。但是,每个科目的行数不同...该如何处理?
非常感谢您!
答案 0 :(得分:0)
老天,
很难看到您想要的东西,但这是朝着这个方向发展的东西。您最可能要查找的是数据透视表或数据透视表。这是我以最佳猜测做过一个示例:
import pandas as pd
import numpy as np
让我们生成一些虚拟数据:
begin = pd.DataFrame({'id': [1,1,1,1,2,2,3,3,3],
'tp': ['t','p','c']*3,
'foo': [np.random.random()+1 for x in range(9) ],
'bar': [np.random.random()+2 for x in range(9) ]
})
假设:tp不一致,单个id可能有多个tp条目。然后,我们只需旋转表并列出我们想要的列即可:
pd.pivot_table(begin, values=['foo', 'bar'], columns=['id', 'tp'])
如果假设先验是错误的,则可以执行以下操作:
pd.pivot_table(begin, values=['tp,'foo', 'bar'], columns='id')
有关更多信息,请参见documentation on Pivot