gpt4 book ai didi

python - 应用 vs 嵌套 for 循环

转载 作者:行者123 更新时间:2023-11-28 20:13:56 26 4
gpt4 key购买 nike

我正在尝试在 python 中构建一个数据框,其中填充了 1 和 0,具体取决于一列中的数字:

Date        Hour
2005-01-01 1
2005-01-01 2
2005-01-01 3
2005-01-01 4

我想根据“小时”中的数字创建新列,如果该行等于“小时”中的值,则用 1 填充每一列,否则用 0 填充。

Date        Hour HE1 HE2 HE3 HE4
2005-01-01 1 1 0 0 0
2005-01-01 2 0 1 0 0
2005-01-01 3 0 0 1 0
2005-01-01 4 0 0 0 1

我可以用这段代码来做,但是需要很长时间:

for x in range(1,5):
_HE = 'HE' + str(x)
for i in load.index:
load.at[i, _HE] = 1 if load.at[i,'Hour']==x else 0

我觉得这是一个很棒的 .apply() 应用程序(没有双关语意),但我无法让它正常工作。

您将如何加快速度?

最佳答案

在 pandas 中不推荐使用循环,因为如果存在一些向量化的解决方案会很慢。

注意:在函数 apply 中也是引擎盖下的循环。

所以使用pandas.get_dummiesDataFrame.add_prefixjoin用于添加到原始 df:

df = df.join(pd.get_dummies(df['Hour'].astype(str)).add_prefix('HE'))
print (df)
Date Hour HE1 HE2 HE3 HE4
0 2005-01-01 1 1 0 0 0
1 2005-01-01 2 0 1 0 0
2 2005-01-01 3 0 0 1 0
3 2005-01-01 4 0 0 0 1

相似的功能有不同的表现:

df = pd.concat([df] * 1000, ignore_index=True)

In [62]: %timeit df.join(pd.get_dummies(df['Hour'].astype(str)).add_prefix('HE'))
3.54 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

#U9-Forward solution
In [63]: %timeit df.join(df['Hour'].astype(str).str.get_dummies().add_prefix('HE'))
61.6 ms ± 297 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

关于python - 应用 vs 嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52143854/

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