pythonPandas,如何减少具有相同值的行数据帧?

2024-10-06 14:19:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

说清楚点

  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

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

先谢谢你


Tags: 数据comdfindexcatabcdogcat1
1条回答
网友
1楼 · 发布于 2024-10-06 14:19:17

两个级别都使用^{}

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

相关问题 更多 >