我有一个df.columns=['ID','Month','Characteristic','Value']的 Dataframe df,我想知道子集=['ID','Month','Characteristic']有多少个值a,所以我首先创建了一个新列df ['Count']=1,然后应用
db=df.groupby(['ID','Month','Characteristic']['Count'].sum()
db=db.to_frame()
db=db.reset_index()
奇怪的是,如果我上传df作为 parquet 使用:
import pyarrow.parquet as pq
_table = (pq.ParquetFile(path)
.read(use_pandas_metadata=True))
df = _table.to_pandas(strings_to_categorical=True)
当我计算db的时候,它给了我一个内存错误,因为它创建了所有可能的组合:例如,即使ID 1在月份M1中不具有特性C1(单位:db),我也会获得如下行:
| 识别号|特征c|月份|计数|
| - ------|- ------|- ------|- ------|
| 识别码1|C1|M1|无|
我说这很奇怪,因为如果我先把 parquet 保存为csv,然后上传这个csv,它会给我正确的结果,所以在这种情况下,没有零计数的线条。你有什么想法吗?
1条答案
按热度按时间dbf7pr2w1#
你的问题来自于使用了绝对性。
因为在加载数据时使用
strings_to_categorical=True
,所以group by的行为会发生变化,为每个可能的ID/Characteristic/Month生成一个条目。您可以停止使用
strings_to_categorical=True
,但这将增加程序的内存使用。或者,您可以更改分组依据,仅显示“观察”值: