当我在一个大数据框架上对同一个句子使用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'})
伙计们,真的迷路了。是什么改变了这一切?
1条答案
按热度按时间rsl1atfo1#
我意识到这个问题与 Dataframe 索引有关。当小 Dataframe 连接时,它们保留了它们的索引,因此有一些重复的索引。
因此,只需重置大 Dataframe 索引即可解决。