我想将这个DataFrame分成预先定义的数量的块,并且每个块的大小大致相同:
import pandas as pd
df = pd.DataFrame({
"user": ["A", "A", "B", "C", "C", "C"],
"value": [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]})
# user value
# 0 A 0.3
# 1 A 0.4
# 2 B 0.5
# 3 C 0.6
# 4 C 0.7
# 5 C 0.8
由于DataFrame非常大(数百万行),因此代码应该更有效率。
问题在于某些用户只应存在于其中一个块中。
例如,如果块数为3,则:
- 第一块应具有行[0, 1]
- 第二块应具有第2行,而不应具有第3行,因为第3行是给用户C的
- 第三块应具有行[3, 4, 5]
# Chunk #1 (DataFrame):
# 0 A 0.3
# 1 A 0.4
# Chunk #2 (DataFrame):
# 2 B 0.5
# Chunk #3 (DataFrame):
# 3 C 0.6
# 4 C 0.7
# 5 C 0.8
将这个分成三块的过程是不正确的,因为用户C会出现在两个块中:
# Chunk #1 (DataFrame):
# 0 A 0.3
# 1 A 0.4
# Chunk #2 (DataFrame):
# 2 B 0.5
# 3 C 0.6
# Chunk #3 (DataFrame):
# 4 C 0.7
# 5 C 0.8
我认为,将DataFrameGroupBy按照用户进行groupby后再将其分成块的一些解决方案即可。
groupby("user")
将数据分成组,然后合并这些组以达到所需的最终块数。这种方法可能会将在原始数据框中不相邻的用户分组在一起,这样做是否可以? - filippo