pandas 过滤+对同一句子的DF进行分组

iaqfqrcu  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(126)

当我在一个大数据框架上对同一个句子使用pandas.loc和pandas.groupy时,我遇到了一个非常奇怪的行为。
为了说明。
这是一个小 Dataframe 。这个DF有3 mm行

这是一个大的数据框。这个DF有80毫米的行。

正如你所看到的,它们是相似的。小的是giftcards交易数据框架。大的是giftcards +子公司+预付费手机交易。它们具有相同的结构,你可以在df.info()上看到

但是,这行代码适用于小 Dataframe ,而不适用于大 Dataframe

Extração = Unificado.loc[Unificado.data.dt.date <= date(2022,12,31)].groupby(Unificado.data.dt.to_period('Q')).aggregate({'gmv' : 'sum', 'receita':'sum', 'mci':'nunique'})

这是失败时的输出

Output exceeds the size limit. Open the full output data in a text editor---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[6], line 1
----> 1 Extração = Unificado.loc[Unificado.data.dt.date <= date(2022,12,31)].groupby(Unificado.data.dt.to_period('Q')).aggregate({'gmv' : 'sum', 'receita':'sum', 'mci':'nunique'})
      2 Extração

File c:\Users\fabio\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\frame.py:8256, in DataFrame.groupby(self, by, axis, level, as_index, sort, group_keys, observed, dropna)
   8253     raise TypeError("You have to supply one of 'by' and 'level'")
   8254 axis = self._get_axis_number(axis)
-> 8256 return DataFrameGroupBy(
   8257     obj=self,
   8258     keys=by,
   8259     axis=axis,
   8260     level=level,
   8261     as_index=as_index,
   8262     sort=sort,
   8263     group_keys=group_keys,
   8264     observed=observed,
   8265     dropna=dropna,
   8266 )

File c:\Users\fabio\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\groupby\groupby.py:931, in GroupBy.__init__(self, obj, keys, axis, level, grouper, exclusions, selection, as_index, sort, group_keys, observed, dropna)
    928 self.dropna = dropna
    930 if grouper is None:
--> 931     grouper, exclusions, obj = get_grouper(
...
-> 4274     raise ValueError("cannot reindex on an axis with duplicate labels")
   4275 else:
   4276     indexer, _ = self.get_indexer_non_unique(target)

ValueError: cannot reindex on an axis with duplicate labels

但是,让我惊讶的是,在大数据框架上,只要我把代码“分成”两行,它就能工作:

Extração = Unificado.loc[Unificado.data.dt.date <= date(2022,12,31)]
Extração = Extração.groupby(Extração.data.dt.to_period('Q')).aggregate({'gmv' : 'sum', 'receita':'sum', 'mci':'nunique'})

伙计们,真的迷路了。是什么改变了这一切?

rsl1atfo

rsl1atfo1#

我意识到这个问题与 Dataframe 索引有关。当小 Dataframe 连接时,它们保留了它们的索引,因此有一些重复的索引。
因此,只需重置大 Dataframe 索引即可解决。

相关问题