如何透视复杂的数据框 [英] how to pivot complex dataframe

查看:56
本文介绍了如何透视复杂的数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个如下所示的数据框.

I have a dataframe shown in below.

df =pd.DataFrame({'ID': [1, 2, 3, 4, 5], 'contract1' :["A", "B", "C", "D", "B"],
           'contract2' :["C", "A", np.nan, "A", np.nan],
           'contract3' :[np.nan, "C", np.nan, np.nan, np.nan] })
df

ID        contract1   contract2   contract3    
1             A           C         nan
2             B           A          C
3             C          nan        nan
4             D           A         nan
5             B          nan        nan

我想要这样的标记结果;

I would like the flag result like this;

ID     A     B     C      D
1      1     0     1      0
2      1     1     1      0 
3      0     0     1      0
4      1     0     0      1
5      0     1     0      0  

此标志表显示每个ID是否具有每个合约. 也许可以使用数据透视,但是我无法处理这种复杂的数据框... 我可以问一下如何转换吗?

This flag table show whether each ID have a each contract. Maybe pivot is available,but I couldn't handle this kind of complex dataframe... Can I ask how to transform ?

推荐答案

一个更快的实现是使用

A Faster implementation would be to use melt in conjunction with str.get_dummies as shown:

pd.melt(df, id_vars=['ID']).set_index('ID')['value']        \
                           .str.get_dummies()               \
                           .groupby(level=0)                \
                           .agg(np.sum)

    A  B  C  D
ID            
1   1  0  1  0
2   1  1  1  0
3   0  0  1  0
4   1  0  0  1
5   0  1  0  0

这篇关于如何透视复杂的数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆