Pandas-根据列删除重复的行

时间:2016-04-03 00:39:33

标签: python pandas

我想删除相对于列的重复行,并根据特定条件重新排列数据框中的数据。例如,我有以下数据框:

FROM    CONT    ID1    ID2    ID3    ID4    ID5    ID6    ID7
63309    89     101.3  NA     NA     NA     NA     NA     NA
63309    89     NA     102.3  NA     NA     NA     NA     NA
63309    89     NA     NA     NA     104    NA     NA     NA
63309    90     NA     NA     103    105.0  NA     NA     NA
63309    89     NA     NA     NA     NA     NA     107.1  NA
63310    92     NA     105.1  105.3  789.1  104    NA     NA
63310    92     109    NA     NA     NA     NA     NA     NA
63311    94     104    109    890    NA     NA     NA     107
63309    89     NA     NA     NA     NA     109    NA     111

最后我的结果是这样的。

FROM    CONT    ID1    ID2    ID3    ID4    ID5    ID6    ID7
63309    89     101.3  102.3  NA     104.0  109.0  107.1  111.0

63309    90     NA     NA     103.0  105.0  NA     NA     NA

63310    92     109.0  105.1  105.3  789.1  104.0  NA     NA

63311    94     104.0  109.0   890.0  NA     NA    NA    107.0

数据必须分组在' FROM'基于' CONT'的列如上所示的列和基于此的重新排列。我尝试在熊猫中使用groupby,但它没有给我所需的输出。它删除了“' CONT'

之后的列中的数据。”

1 个答案:

答案 0 :(得分:2)

>>> df.groupby(['FROM', 'CONT']).sum()
              ID1    ID2    ID3    ID4  ID5    ID6  ID7
FROM  CONT                                             
63309 89    101.3  102.3    NaN  104.0  109  107.1  111
      90      NaN    NaN  103.0  105.0  NaN    NaN  NaN
63310 92    109.0  105.1  105.3  789.1  104    NaN  NaN
63311 94    104.0  109.0  890.0    NaN  NaN    NaN  107

如果您不希望索引数据:

>>> df.groupby(['FROM', 'CONT'], as_index=False).sum()
    FROM  CONT    ID1    ID2    ID3    ID4  ID5    ID6  ID7
0  63309    89  101.3  102.3    NaN  104.0  109  107.1  111
1  63309    90    NaN    NaN  103.0  105.0  NaN    NaN  NaN
2  63310    92  109.0  105.1  105.3  789.1  104    NaN  NaN
3  63311    94  104.0  109.0  890.0    NaN  NaN    NaN  107