我有一个数据框:
df
ID 0 1 2 3 4 ....
1 10 20 5 1 2 ....
2 3 4 NaN 10 1 ....
我需要转置该列的单元格值0,1,2,3,4...
到列标题,如果相应 ID 存在单元格值,则将其填充为 1。
期望的输出:
ID 1 2 3 4 5 ... 10 20 ..
1 1 1 0 0 1 ... 1 1 ..
2 1 0 1 1 0 ... 1 0 ..
请注意,某些条目可以是NaN
.
我怎样才能得到想要的输出?
Use DataFrame.set_index http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.set_index.html with DataFrame.stack http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.stack.html删除缺失值,然后通过以下方式创建指标get_dummies http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html并返回1/0
by max
按第一级,最后将列转换为整数:
df1 = (pd.get_dummies(df.set_index('ID').stack())
.max(level=0)
.rename(columns=int)
.reset_index())
print (df1)
ID 1 2 3 4 5 10 20
0 1 1 1 0 0 1 1 1
1 2 1 0 1 1 0 1 0
EDIT:
print (df)
ID 0 1 2 3 4 5
0 1 10 20 5.0 1 2 5
1 2 3 4 NaN 10 1 2
If use max
然后总是在输出中0/1
值(检查第 5 列):
df1 = (pd.get_dummies(df.set_index('ID').stack())
.max(level=0)
.rename(columns=int)
.reset_index())
print (df1)
ID 1 2 3 4 5 10 20
0 1 1 1 0 0 1 1 1
1 2 1 1 1 1 0 1 0
但如果使用sum
它计算值(检查 5 列):
df2 = (pd.get_dummies(df.set_index('ID').stack())
.sum(level=0)
.rename(columns=int)
.reset_index())
print (df2)
ID 1 2 3 4 5 10 20
0 1 1 1 0 0 2 1 1
1 2 1 1 1 1 0 1 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)