转换Pandas Dataframe

use*_*006 5 python dataframe pandas

是否有一个pandas函数来转换此数据,因此它将列显示为a,b,c,d,e或数据字段内的任何内容,并且行计算有多少字母.

import pandas as pd

trans = pd.read_table('output.txt', header=None, index_col=0)

print trans
>>> 
        1  2    3    4
0                     
11      a  b    c  NaN
666     a  d    e  NaN
10101   b  c    d  NaN
1010    a  b    c    d
414147  b  c  NaN  NaN
10101   a  b    d  NaN
1242    d  e  NaN  NaN
101     a  b    c    d
411     c  d    e  NaN
444     a  b    c  NaN
Run Code Online (Sandbox Code Playgroud)

相反,我希望输出是这样的:

        a  b    c     d   e
0                     
11      1  1    1   NaN  NaN
666     1  NaN  NaN   1    1
Run Code Online (Sandbox Code Playgroud)

函数.stack()几乎完成它但格式错误.

Rut*_*ies 5

你也可以使用熊猫 get_dummies()

pd.get_dummies(df.unstack().dropna()).groupby(level=1).sum()
Run Code Online (Sandbox Code Playgroud)

结果是:

        a  b  c  d  e
0                    
11      1  1  1  0  0
666     1  0  0  1  1
10101   0  1  1  1  0
1010    1  1  1  1  0
414147  0  1  1  0  0
10101   1  1  0  1  0
1242    0  0  0  1  1
101     1  1  1  1  0
411     0  0  1  1  1
444     1  1  1  0  0
Run Code Online (Sandbox Code Playgroud)

你可以用你想要的NaN替换零.

它在一行中有点模糊.df.unstack().dropna()基本上将你的DataFrame扁平化为一系列并删除al NaN.在get_dummies给出的字母所有出现的表,但在拆散数据帧每个级别.然后,分组和总和将索引与原始形状组合.