gpt4 book ai didi

python - 使用 pandas 比较两列

转载 作者:IT老高 更新时间:2023-10-28 20:24:22 24 4
gpt4 key购买 nike

以此为起点:

a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])

看起来像

  one  two three
0 10 1.2 4.2
1 15 70 0.03
2 8 5 0

我想在 pandas 中使用类似 if 语句。

if df['one'] >= df['two'] and df['one'] <= df['three']:
df['que'] = df['one']

基本上,通过 if 语句检查每一行来创建一个新列。

文档说要使用 .all 但没有示例...

最佳答案

您可以使用 np.where .如果 cond是一个 bool 数组,AB是数组,那么

C = np.where(cond, A, B)

定义 C 等于 A在哪里 cond为真,B在哪里 cond是假的。

import numpy as np
import pandas as pd

a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])

df['que'] = np.where((df['one'] >= df['two']) & (df['one'] <= df['three'])
, df['one'], np.nan)

产量

  one  two three  que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN

如果您有多个条件,则可以使用 np.select反而。例如,如果您希望 df['que']等于 df['two']df['one'] < df['two'] , 那么

conditions = [
(df['one'] >= df['two']) & (df['one'] <= df['three']),
df['one'] < df['two']]

choices = [df['one'], df['two']]

df['que'] = np.select(conditions, choices, default=np.nan)

产量

  one  two three  que
0 10 1.2 4.2 10
1 15 70 0.03 70
2 8 5 0 NaN

如果我们可以假设 df['one'] >= df['two']df['one'] < df['two']是False,那么条件和选择可以简化为

conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]

choices = [df['two'], df['one']]

(如果 df['one']df['two'] 包含 NaN,则该假设可能不成立。)


注意

a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])

用字符串值定义一个DataFrame。由于它们看起来是数字,因此您最好将这些字符串转换为 float :

df2 = df.astype(float)

然而,这会改变结果,因为字符串是逐个字符比较的,而 float 是按数字比较的。

In [61]: '10' <= '4.2'
Out[61]: True

In [62]: 10 <= 4.2
Out[62]: False

关于python - 使用 pandas 比较两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27474921/

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