小能豆

如何将数据框元素转换为条件?

py

我有一个数据框,我想将一列转换为条件。

例如,这是一个示例数据框:

df=pd.DataFrame({'a':['>28','27','<26'],'b':['1','2','3']})

df
     a  b
0  >28  1
1   27  2
2  <26  3

我想生成一系列 if 语句以获得理想的 b 值:

if a > 28:
    b=1
elif a=27:
    b=2
elif a < 26:
    b=3

我怎样才能做到这一点?在我的数据框中,所有元素都存储为字符串。

我正在尝试使用该iloc()功能进行选择,但它无法处理范围条件 ( >)

如果有一种优雅的方法可以做到这一点?还是我必须手动输入所有条件?


阅读 100

收藏
2023-05-25

共1个答案

小能豆

您可以使用numpy库中的np.select()函数来实现条件转换。np.select()函数允许您基于给定的条件和相应的值选择和分配值。

以下是如何在您的示例数据框中使用np.select()函数进行条件转换的示例代码:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': ['>28', '27', '<26'], 'b': ['1', '2', '3']})

conditions = [
    df['a'].astype(str).str.startswith('>'),
    df['a'].astype(str) == '27',
    df['a'].astype(str).str.startswith('<')
]

choices = [1, 2, 3]

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

print(df)

输出:

     a  b
0  >28  1
1   27  2
2  <26  3

在上面的代码中,我们首先定义了条件列表conditions,其中每个条件是一个布尔值序列,用于检查每个元素是否满足相应的条件。接下来,我们定义了choices列表,其中包含与每个条件对应的值。最后,我们使用np.select()函数将条件应用于数据框的列a,并根据条件选择相应的值,并将结果赋给列b

注意,我们在应用条件之前使用.astype(str)将列a中的元素转换为字符串,以确保能够正确处理字符串形式的条件。此外,我们使用default=df['b']将默认值设置为原始的列b值,以防某些行不满足任何条件。

使用np.select()函数可以更简洁和优雅地处理条件转换,而不需要手动编写大量的if-elif-else语句。

2023-05-25