gpt4 book ai didi

python - 根据数据框中另一列的值创建新列

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

假设我有一个像这样的 6 列 DataFrame:

                  close     high     low    open     volume     change
ts
2017-08-24 13:00:00 921.28 930.840 915.50 928.66 1270306.0 -7.38
2017-08-25 13:00:00 915.89 925.555 915.50 923.49 1053376.0 -7.6
2017-08-28 13:00:00 913.81 919.245 911.87 916.00 1086484.0 -2.19
2017-08-29 13:00:00 921.29 923.330 905.00 905.10 1185564.0 16.19
2017-08-30 13:00:00 929.57 930.819 919.65 920.05 1301225.0 9.52
2017-08-31 13:00:00 939.33 941.980 931.76 931.76 1560033.0 7.51

如何添加一列,如果更改 > 0.0,否则为 0,则每行显示 1?

最佳答案

选项 1

使用 bool 过滤:

df['newCol'] = (df.change > 0).astype(int)
df['newCol']

ts
2017-08-24 13:00:00 0
2017-08-25 13:00:00 0
2017-08-28 13:00:00 0
2017-08-29 13:00:00 1
2017-08-30 13:00:00 1
2017-08-31 13:00:00 1
Name: newCol, dtype: int64
<小时/>

选项 2

使用np.where

df['newCol'] = np.where(df.change > 0.0, 1, 0)
df['newCol']

ts
2017-08-24 13:00:00 0
2017-08-25 13:00:00 0
2017-08-28 13:00:00 0
2017-08-29 13:00:00 1
2017-08-30 13:00:00 1
2017-08-31 13:00:00 1
Name: newCol, dtype: int64
<小时/>

选项 3

使用df.gt:

df['newCol'] = df.change.gt(0).astype(int)  
df['newCol']

ts
2017-08-24 13:00:00 0
2017-08-25 13:00:00 0
2017-08-28 13:00:00 0
2017-08-29 13:00:00 1
2017-08-30 13:00:00 1
2017-08-31 13:00:00 1
Name: newCol, dtype: int64
<小时/>

性能

%timeit (df.change > 0).astype(int)
1000 loops, best of 3: 276 µs per loop

%timeit np.where(df.change > 0.0, 1, 0)
10000 loops, best of 3: 209 µs per loop

%timeit df.change.gt(0).astype(int)
1000 loops, best of 3: 351 µs per loop

df_test = pd.concat([df] * 10000, 0) # Setup

%timeit (df_test.change > 0).astype(int)
1000 loops, best of 3: 377 µs per loop

%timeit np.where(df_test.change > 0.0, 1, 0)
1000 loops, best of 3: 328 µs per loop

%timeit df_test.change.gt(0).astype(int)
1000 loops, best of 3: 425 µs per loop

还有...

%timeit df_test.change.apply(lambda x: 1 if x > 0 else 0)
10 loops, best of 3: 24.5 ms per loop

关于python - 根据数据框中另一列的值创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45990893/

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