这是Pivot a dataframe with two columns as the index的后续问题。
我的数据采用这种格式:
Record ID Para Col2 Col3
1 A x a
1 A x b
2 B y a
2 B y b
1 A z c
1 C x a我想把它重塑为:
Record Para a b c x y z
1 A 1 1 1 1 0 1
1 C 1 1 1 1 0 1
2 B 1 1 0 0 1 0 我试过了
csv3 = csv2.pivot_table(index=['Record ID', 'Para'], columns=csv2.iloc[:,2:], aggfunc='size', fill_value=0).reset_index()但别把专栏搞错了。我需要做什么改变呢?
更新1:
我有10根柱子。
发布于 2018-06-13 01:37:16
IIUC get_dummies
pd.get_dummies(df.set_index(['RecordID','Para']),prefix='',prefix_sep = '').sum(level=[0,1]).gt(0).astype(int)
Out[272]:
x y z a b c
RecordID Para
1 A 1 0 1 1 1 1
2 B 0 1 0 1 1 0更新
pd.get_dummies(df.set_index(['RecordID','Para']),prefix='',prefix_sep = '').sum(level=[0,1]).gt(0).astype(int).replace(0,np.nan).groupby(level=0).ffill().fillna(0)
Out[292]:
x y z a b c
RecordID Para
1 A 1.0 0.0 1.0 1 1.0 1.0
2 B 0.0 1.0 0.0 1 1.0 0.0
1 C 1.0 0.0 1.0 1 1.0 1.0发布于 2018-06-13 00:29:26
您可以聚合到set,然后使用get_dummies。
df2 = df.groupby(['RecordID', 'Para'])[df.columns[2:]].aggregate(set)
values = df2.apply(lambda x: set().union(*x.values), axis=1)
dummies = values.str.join('|').str.get_dummies()
res = dummies.reset_index()
print(res)
RecordID Para a b c x y z
0 1 A 1 1 1 1 0 1
1 2 B 1 1 0 0 1 0https://stackoverflow.com/questions/50827506
复制相似问题