如何使用python pandas groupby或.DataFrameGroupBy对象创建唯一的组合列表

aro*_*r09 4 python python-2.7 pandas

是否有更有效的方法来使用pandas groupby或pandas.core.groupby.DataFrameGroupBy对象来创建唯一的列表,系列或数据框,其中我想要N列中的2列的唯一组合.例如,如果我有列:日期,名称,购买的项目,我只想知道唯一的名称和日期组合,这工作正常:

y = x.groupby(['Date','Name']).count()
y = y.reset_index()[['Date', 'Name']]
Run Code Online (Sandbox Code Playgroud)

但我觉得应该有更清洁的方式使用

y = x.groupby(['Date','Name'])
Run Code Online (Sandbox Code Playgroud)

但y.index给了我一个错误,虽然y.keys工作.这实际上让我问一般问题是什么是pandas.core.groupby.DataFrameGroupBy对象方便?

谢谢!

unu*_*tbu 6

你不需要在这里使用 - 实际上不应该使用 - groupby.您可以使用drop_duplicates来获取唯一的行:

x.drop_duplicates(['Date','Name'])
Run Code Online (Sandbox Code Playgroud)

演示:

In [156]: x = pd.DataFrame({'Date':[0,1,2]*2, 'Name':list('ABC')*2})

In [158]: x
Out[158]: 
   Date Name
0     0    A
1     1    B
2     2    C
3     0    A
4     1    B
5     2    C

In [160]: x.drop_duplicates(['Date','Name'])
Out[160]: 
   Date Name
0     0    A
1     1    B
2     2    C
Run Code Online (Sandbox Code Playgroud)

你不应该使用groupby因为

  1. x.groupby(['Date','Name']).count() 执行每个组中元素数量的计数,但不使用计数 - 这是浪费的计算.
  2. x.groupby(['Date','Name']).count()如果x只有DateName列,则引发AttributeError .
  3. drop_duplicates 为此目的要快得多.

groupby当您想对每个组执行某些操作时使用,例如计算每个组中的元素数,或计算每个组的某些统计信息(例如总和或平均值等).