gpt4 book ai didi

python - 使用空字符串或 A 列中的值(具体取决于 B 列上的值)在 pandas 数据框中添加新列

转载 作者:行者123 更新时间:2023-12-01 00:39:42 25 4
gpt4 key购买 nike

我有以下 pandas 数据框:

df['price_if_0005'] = df['price'] % Decimal('0.0005')

print(tabulate(df, headers='keys', tablefmt='psql'))

+-----+---------+-------------+-----------------+-----------------+
| | price | tpo_count | tpo | price_if_0005 |
|-----+---------+-------------+-----------------+-----------------|
| 0 | 1.4334 | 1 | n | 0.0004 |
| 1 | 1.4335 | 1 | n | 0 |
| 2 | 1.4336 | 1 | n | 0.0001 |
| 3 | 1.4337 | 1 | n | 0.0002 |
| 4 | 1.4338 | 1 | n | 0.0003 |
| 5 | 1.4339 | 1 | n | 0.0004 |
| 6 | 1.434 | 1 | n | 0 |
| 7 | 1.4341 | 1 | n | 0.0001 |
| 8 | 1.4342 | 3 | noq | 0.0002 |
| 9 | 1.4343 | 3 | noq | 0.0003 |
| 10 | 1.4344 | 3 | noq | 0.0004 |

当“price_if_0005”为 0 时,我想要另一列为空字符串或“price”列中的值。IE。这将是所需的结果表:

+-----+---------+-------------+-----------------+-----------------+--------+
| | price | tpo_count | tpo | price_if_0005 | label |
|-----+---------+-------------+-----------------+-----------------|--------+
| 0 | 1.4334 | 1 | n | 0.0004 | |
| 1 | 1.4335 | 1 | n | 0 | 1.4335 |
| 2 | 1.4336 | 1 | n | 0.0001 | |
| 3 | 1.4337 | 1 | n | 0.0002 | |
| 4 | 1.4338 | 1 | n | 0.0003 | |
| 5 | 1.4339 | 1 | n | 0.0004 | |
| 6 | 1.4340 | 1 | n | 0 | 1.4340 |
| 7 | 1.4341 | 1 | n | 0.0001 | |
| 8 | 1.4342 | 3 | noq | 0.0002 | |
| 9 | 1.4343 | 3 | noq | 0.0003 | |
| 10 | 1.4344 | 3 | noq | 0.0004 | |

我已经尝试过:

df['label'] =  ['' if x == 0 else str(y) for x,y in df['price_if_0005'], df['price']]

但我得到:

File "<ipython-input-67-90c17f2505bf>", line 3
df['label'] = ['' if x == 0 else str(y) for x,y in df['price_if_0005'], df['price']]
^
SyntaxError: invalid syntax

最佳答案

只需将 .loc 与 pandas 条件一起使用即可分配您需要的行:

df.loc[df['price_if_0005'] == 0, 'label'] = df['price']

完整示例:

import pandas as pd
from io import StringIO

s = """
price | tpo_count | tpo | price_if_0005
0 | 1.4334 | 1 | n | 0.0004
1 | 1.4335 | 1 | n | 0
2 | 1.4336 | 1 | n | 0.0001
3 | 1.4337 | 1 | n | 0.0002
4 | 1.4338 | 1 | n | 0.0003
5 | 1.4339 | 1 | n | 0.0004
6 | 1.434 | 1 | n | 0
7 | 1.4341 | 1 | n | 0.0001
8 | 1.4342 | 3 | noq | 0.0002
9 | 1.4343 | 3 | noq | 0.0003
10 | 1.4344 | 3 | noq | 0.0004 """

df = pd.read_csv(StringIO(s), sep="\s+\|\s+")
df.loc[df['price_if_0005'] == 0, 'label'] = df['price']
df['label'].fillna('',inplace=True)
print(df)

输出:

     price  tpo_count  tpo  price_if_0005   label
0 1.4334 1 n 0.0004
1 1.4335 1 n 0.0000 1.4335
2 1.4336 1 n 0.0001
3 1.4337 1 n 0.0002
4 1.4338 1 n 0.0003
5 1.4339 1 n 0.0004
6 1.4340 1 n 0.0000 1.434
7 1.4341 1 n 0.0001
8 1.4342 3 noq 0.0002
9 1.4343 3 noq 0.0003
10 1.4344 3 noq 0.0004

关于python - 使用空字符串或 A 列中的值(具体取决于 B 列上的值)在 pandas 数据框中添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57450810/

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