python-熊猫,如何减少具有相同值的行数据框?

时间:2018-10-19 10:11:49

标签: python pandas merge

首先,我有一个从两个数据帧合并的数据帧

要清楚

  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

我尝试过“分组依据”,但结果很奇怪:(

先谢谢您

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