是否有更有效的方法来使用 pandas groupby 或 pandas.core.groupby.DataFrameGroupBy 对象来创建唯一的列表、系列或数据框,其中我想要 N 列中的 2 列的唯一组合。例如,如果我有列:日期、姓名、购买的元素,我只想知道唯一的姓名和日期组合,这很好用:
y = x.groupby(['Date','Name']).count()
y = y.reset_index()[['Date', 'Name']]
但我觉得应该有一种更简洁的方式使用
y = x.groupby(['Date','Name'])
但是 y.index 给我一个错误,尽管 y.keys 有效。这实际上让我问了一个普遍的问题,pandas.core.groupby.DataFrameGroupBy 对象有什么用?
谢谢!
最佳答案
您不需要在这里使用——实际上不应该使用——groupby。你可以使用 drop_duplicates获取唯一行:
x.drop_duplicates(['Date','Name'])
演示:
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
你不应该使用 groupby 因为
x.groupby(['Date','Name']).count()
执行计数 每个组中元素的数量,但未使用计数——这是一种浪费的计算。x.groupby(['Date','Name']).count()
在以下情况下引发 AttributeErrorx
只有Date
和Name
列。drop_duplicates
为此目的要快得多。
Use groupby
when you want to perform some operation on each group ,例如计算每个组中元素的数量,或计算每个组的一些统计量(例如总和或平均值等)。
关于python - 如何使用 python pandas groupby 或 .DataFrameGroupBy 对象创建唯一的组合列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25535726/