什么不能按每列对DataFrame进行分组

时间:2014-12-11 18:36:54

标签: python pandas

我过去常常执行此类操作来消除DataFrame中的重复记录

import pandas as pd

data = [
    [669, 1, 2003, 2],
    [673, 1, 2003, 2],
    [675, 1, 2004, 1],
    [739, 1, 2004, 1],
    [741, 1, 2003, 1],
    [773, 1, 2004, 1],
    [791, 1, 2004, 1],
    [794, 1, 2004, 1],
]

df = pd.DataFrame(data, columns=['A', 'B', 'C', 'D'])
dfg = df.groupby(['A', 'B', 'C', 'D'])
dff = dfg.first().reset_index()

print pd.__version__
print

print df
print
print dff
print

输出如下:

0.15.1

     A  B     C  D
0  669  1  2003  2
1  673  1  2003  2
2  675  1  2004  1
3  739  1  2004  1
4  741  1  2003  1
5  773  1  2004  1
6  791  1  2004  1
7  794  1  2004  1

Empty DataFrame
Columns: [A, B, C, D]
Index: []

您可以看到dff DataFrame为空。我不明白为什么。

但是,如果我添加一个虚拟列' E'并按其他一切分组,然后只切片我想要的列,一切都很好。

df_ = df.copy()
df_['E'] = 'E'
dfg_ = df_.groupby(['A', 'B', 'C', 'D'])
dff_ = dfg_.first().reset_index()

print df_[['A', 'B', 'C', 'D']]
print
print dff_[['A', 'B', 'C', 'D']]

我得到了这个输出:

     A  B     C  D
0  669  1  2003  2
1  673  1  2003  2
2  675  1  2004  1
3  739  1  2004  1
4  741  1  2003  1
5  773  1  2004  1
6  791  1  2004  1
7  794  1  2004  1

     A  B     C  D
0  669  1  2003  2
1  673  1  2003  2
2  675  1  2004  1
3  739  1  2004  1
4  741  1  2003  1
5  773  1  2004  1
6  791  1  2004  1
7  794  1  2004  1

所以我的问题是这些:

  1. 这是熊猫0.15.1的故意改变吗?
  2. 是否有更好或更合适的方法来消除我的DataFrame中的重复记录?
  3. 谢谢, PIR

1 个答案:

答案 0 :(得分:2)

  1. 我怕我无法回答

  2. 是的,您可以使用df.drop_duplicates()docs)您还可以传递subset列名列表,以便从这些列中删除重复项。