gpt4 book ai didi

python-3.x - 在python中将所有列中的所有负值替换为零

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

我有低于df

date              T1   T2  T3  T4
1-1-2010 00:10 20 -5 4 3
1-1-2010 00:20 85 -78 34 21
1-1-2010 00:30 -45 22 31 75
1-1-2010 00:40 -6 5 7 -28


我想将负值从1st(从T1列)列开始替换为零。

我试过下面的代码:

df.iloc[:,1:].mask(df, 0)


但同时也会显示日期列的“ 0”值。

最终输出应为:

date              T1   T2  T3  T4
1-1-2010 00:10 20 0 4 3
1-1-2010 00:20 85 0 34 21
1-1-2010 00:30 0 22 31 75
1-1-2010 00:40 0 5 7 0

最佳答案

使用pandas.DataFrame.clip

df.iloc[:, 1:] = df.iloc[:, 1:].clip(0)
print(df)


输出:

             date  T1  T2  T3  T4
0 1-1-2010 00:10 20 0 4 3
1 1-1-2010 00:20 85 0 34 21
2 1-1-2010 00:30 0 22 31 75
3 1-1-2010 00:40 0 5 7 0


在样本中,不仅 clipmask更快,而且在更大的数据集中,它也更快:

# Your sample -> 3x faster
%timeit df.iloc[:, 1:].clip(0)
# 1.74 ms ± 115 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit df.iloc[:,1:].mask(df.iloc[:,1:] < 0, 0)
# 5.25 ms ± 573 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)




# Large Sample -> 1,000,000 elements --> about 30x
large_df = pd.DataFrame(pd.np.random.randint(-5, 5, (1000, 1000)))

%timeit large_df.clip(0)
# 17.2 ms ± 2.44 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit large_df.mask(large_df< 0, 0)
# 498 ms ± 47 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

关于python-3.x - 在python中将所有列中的所有负值替换为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58553613/

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