gpt4 book ai didi

python - 有条件替换 pandas DataFrame

转载 作者:行者123 更新时间:2023-12-01 03:32:32 24 4
gpt4 key购买 nike

我有以下 pandas DataFrame:

ID  COL1  COL2
123 1 ABC
123 1 CCC
123 NaN AVV
345 2 FGG
345 NaN FRG
345 NaN FGT

我需要根据相同的 ID 替换 Col1 中的所有 NaN 值才能获得以下结果:

ID  COL1  COL2
123 1 ABC
123 1 CCC
123 1 AVV
345 2 FGG
345 2 FRG
345 2 FGT

我可以编写for循环,但我的数据集执行脚本需要很长时间。有条件替换功能吗?

最佳答案

从以下示例开始:

df = pd.DataFrame({'ID': list(range(10)), 'COL1': [np.random.choice([1,np.nan]) for _ in range(10)]})
df = pd.concat([df]*100000).reset_index(drop = True)

df.head()

# COL1 ID
#0 NaN 0
#1 1.0 1
#2 1.0 2
#3 NaN 3
#4 1.0 4

您可以在每个组内使用前向填充和后向填充方法来填充缺失值:

%timeit df.groupby('ID').ffill().bfill()
1 loop, best of 3: 212 ms per loop

或者另一种方法是按 IDCOL1 对值进行排序,首先对 ID 进行排序,然后对 COL1 进行排序> 在每个 ID 中,将所有缺失值推到每个 ID 的末尾,然后您可以使用 ffill() ,它似乎比此示例中的 ffill()bfill() 方法:

%timeit df.sort_values(['ID', 'COL1']).ffill()
10 loops, best of 3: 71.6 ms per loop
<小时/>

如果还有其他不需要的字符串,可以先调用replace方法将字符串替换为NaN。例如,如果要填充的数据框中有空字符串。您可以执行 df.replace('', np.nan).sort_values(['ID', 'COL1']).ffill()

关于python - 有条件替换 pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40710611/

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