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对象方便?
谢谢!
你不需要在这里使用 - 实际上不应该使用 - 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因为
x.groupby(['Date','Name']).count() 执行每个组中元素数量的计数,但不使用计数 - 这是浪费的计算.x.groupby(['Date','Name']).count()如果x只有Date和Name列,则引发AttributeError
.drop_duplicates 为此目的要快得多.groupby当您想对每个组执行某些操作时使用,例如计算每个组中的元素数,或计算每个组的某些统计信息(例如总和或平均值等).