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

标签 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']]

但我觉得应该有一种更简洁的方式使用

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 因为

  1. x.groupby(['Date','Name']).count() 执行计数 每个组中元素的数量,但未使用计数——这是一种浪费的计算。
  2. x.groupby(['Date','Name']).count() 在以下情况下引发 AttributeError x 只有 DateName 列。
  3. 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/

相关文章:

python - 如何获取 tkinter 文本小部件中最后一行的内容(Python 3)

python - 使用 .loc 查询非空值和仅字符串值

python-2.7 - PyCharm 显示 "PEP8: expected 2 blank lines, found 1"

python - python字符串中的持久索引

python-2.7 - Python多维数组

python - Pandas 数据框查询字符串参数中的单引号

python - 读取带分隔符的 csv 文件 |使用 Pandas

php - 创建一个 PHP 页面以接受 python HTTP POST

python - 如何在不设置索引的情况下旋转数据框?

python - 如何根据两个字符串列的差异在 pandas 中创建一个新列?