gpt4 book ai didi

python - 在 pandas 列上操作时避免重复数据框名称

转载 作者:行者123 更新时间:2023-12-02 06:58:50 24 4
gpt4 key购买 nike

这是一个非常初学者的问题,抱歉:在对 pandas 列进行操作时,有没有办法避免重复数据框名称?

R中,data.table允许在不重复数据帧名称的情况下对列进行操作

very_long_dt_name = data.table::data.table(col1=c(1,2,3),col2=c(3,3,1))

# operate on the columns without repeating the dt name:

very_long_dt_name[,ratio:=round(col1/col2,2)]

我不知道如何在Python中使用 pandas 来做到这一点,所以我不断重复 df 名称:

data = {'col1': [1,2,3], 'col2': [3, 3, 1]}
very_long_df_name = pd.DataFrame(data)

# operate on the columns requires repeating the df name

very_long_df_name['ratio'] = np.round(very_long_df_name['col1']/very_long_df_name['col2'],2)

我确信有办法避免它,但我在 Google 上找不到任何内容。有什么提示吗?谢谢。

最佳答案

尝试分配:

very_long_df_name.assign(ratio=lambda x: np.round(x.col1/x.col2,2))

输出:

    col1    col2    ratio
0 1 3 0.33
1 2 3 0.67
2 3 1 3.00
<小时/>

编辑:为了反射(reflect)评论,对 100 万行进行测试:

%%timeit
very_long_df_name.assign(ratio = lambda x:x.col1/x.col2)
# 18.6 ms ± 506 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit
very_long_df_name['ratio'] = very_long_df_name['col1']/very_long_df_name['col2']
# 13.3 ms ± 359 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

使用np.round分配

%%timeit
very_long_df_name.assign(ratio = lambda x: np.round(x.col1/x.col2,2))
# 64.8 ms ± 958 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

而不是-分配:

%%timeit
very_long_df_name['ratio'] = np.round(very_long_df_name['col1']/very_long_df_name['col2'],2)
# 55.8 ms ± 2.43 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

所以看起来分配是矢量化的,只是没有很好地调整。

关于python - 在 pandas 列上操作时避免重复数据框名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339771/

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