new_df=df.apply(pd.value_counts).replace({1:'Y',np.nan:''}).T
print(new_df)
black blue green orange red white yellow
person1 Y Y Y Y Y
person2 Y Y Y Y
person3 Y Y
df2=df.melt()
new_df=pd.crosstab(df2['variable'],df2['value']).replace({0:'',1:'Y'}).rename_axis(index=None,columns=None)
print(new_df)
black blue green orange red white yellow
person1 Y Y Y Y Y
person2 Y Y Y Y
person3 Y Y
>>> import pandas as pd
>>> df = pd.DataFrame({'person1': ['blue', 'red', 'black', 'white', 'orange'],
'person2': ['red', 'blue', 'black', 'green', ''],
'person3': ['green', 'yellow', '', '', '']})
>>> df.T.stack().str.get_dummies().sum(level=0).replace({1: 'Y', 0: ''})
black blue green orange red white yellow
person1 Y Y Y Y Y
person2 Y Y Y Y
person3 Y Y
s=pd.get_dummies(df1)
s.columns=pd.MultiIndex.from_tuples(s.columns.str.split('_').map(tuple))
Yourdf=s.stack(0).sum(level=1).eq(1)
Yourdf
Out[132]:
black blue green orange red white yellow
person1 True True False True True True False
person2 True True True False True False False
person3 False False True False False False True
或者
pd.concat([df1[x].str.get_dummies() for x in df1.columns],keys=df1.columns,axis=1).\
stack(1).sum(level=1).T.eq(1)
Out[164]:
black blue green orange red white yellow
person1 True True False True True True False
person2 True True True False True False False
person3 False False True False False False True
方法1:^{} +
pd.value_counts
方法2:^{} +^{}
你可以试试这个
我将使用
get_dummies
(您可以在末尾添加map({True:'Y',False:''})
)或者
相关问题 更多 >
编程相关推荐