是否有一个 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
相反,我希望输出是这样的:
a b c d e
0
11 1 1 1 NaN NaN
666 1 NaN NaN 1 1
函数 .stack() 几乎可以完成它,但格式错误。
最佳答案
你也可以使用 Pandas get_dummies()
pd.get_dummies(df.unstack().dropna()).groupby(level=1).sum()
结果:
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
您可以根据需要用 NaN 替换零。
它在一行中有点晦涩。 df.unstack().dropna()
基本上将您的 DataFrame 扁平化为一系列并丢弃所有 NaN。 get_dummies
给出了所有字母出现的表格,但针对的是 unstack DataFrame 中的每个级别。分组和求和然后将索引组合到原始形状。
关于python - 转换 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20545613/