gpt4 book ai didi

python - 可变 block 大小 Pandas Dataframe

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:37 24 4
gpt4 key购买 nike

我有一个非常大的 DF,其中包含如下数据:

import pandas as pd
df = pd.DataFrame()
df['CODE'] = [1,2,3,1,2,4,2,2,4,5]
df["DATA"] = [ 'AA', 'BB', 'CC', 'DD', 'AA', 'BB', 'EE', 'FF','GG', 'HH']
df.sort_values('CODE')
df
CODE DATA
0 1 AA
3 1 DD
1 2 BB
4 2 AA
6 2 EE
7 2 FF
2 3 CC
5 4 BB
8 4 GG
9 5 HH

由于大小,我需要将其分成 block 并解析它。但是,CODE 列中包含的 equals 元素不应最终出现在不同的 block 中,而应将这些元素添加到前一个 block 中,即使超出了大小。

基本上,如果我选择 4 行的 block 大小,则第一个 block 可以增加到包含所有带有“2”的元素,并且是:

chunk1:
CODE DATA
0 1 AA
3 1 DD
1 2 BB
4 2 AA
6 2 EE
7 2 FF

我发现了一些关于分块和分组的帖子,如下所示:

split dataframe into multiple dataframes based on number of rows

但是上面提供了相同大小的分块,我需要一个考虑 CODE 列中的值的智能分块。

有什么想法可以做到这一点吗?

最佳答案

我也许想出了一个解决方案(仍在测试所有情况),但不是很优雅。

我创建了一个递归函数,返回要采用的间隔:

def findrange(start,step):
for i in range(start,len(df)+1, step):
if i+step > len(df): return [i, len(df)]
if df.CODE[i+step:i+step+1].values != df.CODE[i+step-1:i+step].values:
return [i,i+step]
else:
return findrange(i,step+1)

然后我调用函数来获取范围并处理数据

interval = [0,0]
idx = 0
N=2
while interval[1] < len(df):
if idx < interval[1]: idx = interval[1]
interval = findrange(idx, N)
idx+=N # this point became useless once interval[1] > idx

我尝试使用 N > 0 的许多不同值发布 DF,看起来不错。如果你有办法让更多像我这样的 Pandas 愿意这样做。

关于python - 可变 block 大小 Pandas Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40462199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com