gpt4 book ai didi

python - 分割数据的分组(pandas)

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

假设您有一个大型 CSV 文件,其中包含数百万行,您可以按 block 进行处理。 文件太大,无法加载到内存中。进行 groupby 并应用相对“复杂”的函数(如 fillna)而不让 block 大小影响结果的最佳方法是什么?我举例说明:

A = pd.DataFrame({"ID":["A", "A", "C" ,"B", "A"], "value":[3,np.nan,4,5,np.nan]})

>>> A
ID value
0 A 2
1 A 3
2 C 4
3 B 5
4 A 6

如果 block 大小为 2 并且我按“ID”分组,那么我会将前两个 A 分组,但保留最后一个 A,这会影响非直接应用函数的结果,

A.groupby('ID').fillna(method='fill')

输出将是:

   value
0 3.0
1 3.0
2 4.0
3 5.0
4 np.nan

请注意,最后一行有一个 np.nan,其中应该有一个 3。

谢谢您,非常感谢您的帮助,

最佳答案

您需要设置一种方法来记住最后的填充值。我使用下面的字典内存

memory = {}

def fill(df):
name = df.name
df = df.copy()

# fill from memory
if name in memory.keys():
df.iloc[0, :] = df.iloc[0, :].fillna(memory[name])

# normal ffill
df = df.fillna(method='ffill')

# update memory
memory.update({name: df.iloc[-1]})

return df
<小时/>
memory

{}
<小时/>
A = pd.DataFrame({"ID":["A", "A", "C" ,"B", "A"], "value":[3,np.nan,4,5,np.nan]})
A

enter image description here

现在我将仅更新 A 前 4 行

A.update(A.iloc[:4].groupby('ID', group_keys=False).apply(fill))
A

enter image description here

请注意,仅填充了第 1 行中的值。第 4 行被单独留下。不过,让我们看看内存

memory

{'A': ID A
value 3
Name: 1, dtype: object, 'B': ID B
value 5
Name: 3, dtype: object, 'C': ID C
value 4
Name: 2, dtype: object}

或者更具体地说内存['A']

ID       A
value 3
Name: 1, dtype: object

现在让我们只更新第 4 行的 A

A.update(A.iloc[4:].groupby('ID', group_keys=False).apply(fill))
A

enter image description here

关于python - 分割数据的分组(pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39048181/

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