[英]Pivot a Pandas dataframe using multiple columns
這是一個后續問題,要對以兩列為索引的數據框進行透視 。
我的數據采用以下格式:
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:
我有十列。
您可以聚合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 0
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.