[英]How to convert row values to attributes (columns) in pandas
我在pandas中有一个数据集,列为pid(患者ID)和代码(药物代码),如示例所示按行排序。 我需要将它们转换为1个患者/行,并列出所有药物作为每个患者的属性。
我现在所拥有的:
pid code
1 Az
1 Bn
2 Az
2 Bn
2 C4
3 Bn
3 C4
3 Dx
4 Az
4 Bn
4 Dx
4 E
5 C4
5 Dx
5 E
我需要将其转换为:
pid Az Bn C4 Dx E
1 y y n n n
2 y y y n n
3 n y y y n
4 y y n y y
5 n n y y y
IIUC crosstab
pd.crosstab(df.pid,df.code).replace({1:'y',0:'n'})
Out[231]:
code Az Bn C4 Dx E
pid
1 y y n n n
2 y y y n n
3 n y y y n
4 y y n y y
5 n n y y y
一种方法是旋转数据框
new_df = df.assign(values='y').pivot(index='pid', columns='code', values='values').replace({None:'n'})
>>> new_df
code Az Bn C4 Dx E
pid
1 y y n n n
2 y y y n n
3 n y y y n
4 y y n y y
5 n n y y y
正玩得开心!
创建具有MultiIndex的系列并拆栈
pd.Series('y', df.values.T.tolist()).unstack(fill_value='n')
Az Bn C4 Dx E
1 y y n n n
2 y y y n n
3 n y y y n
4 y y n y y
5 n n y y y
使用defaultdict
d = defaultdict(dict)
for i, p, c in df.itertuples():
d[c][p] = 'y'
pd.DataFrame(d).fillna('n')
Az Bn C4 Dx E
1 y y n n n
2 y y y n n
3 n y y y n
4 y y n y y
5 n n y y y
i, r = pd.factorize(df.pid)
j, c = pd.factorize(df.code)
e = np.empty((len(r), len(c)), str)
e.fill('n')
e[i, j] = 'y'
pd.DataFrame(e, r, c)
Az Bn C4 Dx E
1 y y n n n
2 y y y n n
3 n y y y n
4 y y n y y
5 n n y y y
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.