首先,我有一个从两个数据帧合并的数据帧
要清楚
df_dog df_cat
dog1 numid cat1 numid
abc n11 122 n11
abc n21 123 n21
abc n31 123 n31
abd n41 121 n41
abd n41 121 n31
我已通过
将数据转换为向量df_com = df_dog.merge(df_cat, on='numid', how='inner').set_index(['dog1','cat1'])
pd.get_dummies(df_com.numid).sort_index(level=0)
,结果显示为
n11 n21 n31 n41
dog1 cat1
abc 122 1 0 0 0
abc 123 0 1 0 0
abc 123 0 0 1 0
abc 121 0 0 0 1
abc 121 0 0 1 0
考虑了
abc 123 0 1 0 0
abc 123 0 0 1 0
abc 121 0 0 0 1
abc 121 0 0 1 0
有重复的行,分别是“ abc 123”和“ abc 121”
所以,我想减少重复的数据,但仍然想保留两个值,很明显,我希望将结果视为
n11 n21 n31 n41
dog1 cat1
abc 122 1 0 0 0
abc 123 0 1 1 0
abc 121 0 0 1 1
我尝试过“分组依据”,但结果很奇怪:(
先谢谢您
答案 0 :(得分:0)
在两个级别上都使用max
:
pd.get_dummies(df_com.numid).sort_index(level=0).max(level=[0,1])
print (df)
n11 n21 n31 n41
dog1 cat1
abc 122 1 0 0 0
123 0 1 1 0
121 0 0 1 1
回答输入数据:
df_com = df_dog.merge(df_cat, on='numid').set_index(['dog1','cat1'])
print (df_com)
numid
dog1 cat1
abc 122 n11
123 n21
123 n31
121 n31
abd 121 n41
121 n41
print (pd.get_dummies(df_com.numid).sort_index(level=0))
n11 n21 n31 n41
dog1 cat1
abc 121 0 0 1 0
122 1 0 0 0
123 0 1 0 0
123 0 0 1 0
abd 121 0 0 0 1
121 0 0 0 1
df = pd.get_dummies(df_com.numid).sort_index(level=0).max(level=[0,1])
print (df)
n11 n21 n31 n41
dog1 cat1
abc 121 0 0 1 0
122 1 0 0 0
123 0 1 1 0
abd 121 0 0 0 1