0
说我有以下数据框:透视熊猫数据帧,并计算“列”参数
import pandas as pd
df = pd.DataFrame()
df['ID'] = [1, 1, 1, 2, 2]
df['Type'] = ['A', 'B', 'Q', 'B', 'R']
df['Status'] = [0, 0, 1, 0, 1]
>>> df
ID Type Status
0 1 A 0
1 1 B 0
2 1 Q 1
3 2 B 0
4 2 R 1
>>>
我希望将这个数据帧由“ID”,重塑它让我有一个“类型”变量和组中每个项目的“状态”变量。见下:
Type1 Type2 Type3 Status1 Status2 Status3
ID
1 A B Q 0 0 1
2 B R NaN 0 1 NaN
我的输出数据框中的行数取决于任何一组ID中的最大记录数。
我认为pivot函数是我想在这里使用的。但是,它需要一个“列”参数,我相信它应该是每个组中每个项目的ID。我计算这个,非常笨拙的方法,我就这样做的更好的方式欣赏的建议:
>>> g=df.groupby('ID')
>>> df['IDinGroup']=[item for sublist in [range(1,len(i[1])+1) for i in g] for item in sublist]
>>> df
ID Type Status IDinGroup
0 1 A 0 1
1 1 B 0 2
2 1 Q 1 3
3 2 B 0 1
4 2 R 1 2
>>>
然后我就可以通过“类型”和“状态”变量循环,并转动每个然后将它们合并回到一起:
>>> ListOfValues=[]
>>> for ValueCol in ['Type','Status']:
... f=df.pivot(index='ID',columns='IDinGroup',values=ValueCol)
... f.columns=[ValueCol+str(Col) for Col in f.columns]
... f.columns.name=None
... ListOfValues.append(f)
...
>>> pd.concat(ListOfValues,1)
Type1 Type2 Type3 Status1 Status2 Status3
ID
1 A B Q 0 0 1
2 B R NaN 0 1 NaN
>>>
我在这里采取正确的方法吗?如果是这样,有什么更好的方法来计算枢轴函数的“列”参数? (每个组内的每个项目的ID)
这很完美,谢谢。 – AJG519