python - 如果值位于列表中,则将条件列添加到数据框

标签 python pandas numpy

我有一个 pandas 数据框,其中有一列名为“字母”,该列以字母表中的字母作为其值。因此第一行可能是“C”,下一行是“Z”,下一行是“M”,依此类推:

字母

C

Z

中号

一个

B

...

我还有根据字母表中字母的位置对字母进行分组的列表,因此:

early_alph = ['A','B','C'....'M']
late_alph = ['N','O','P'....'Z']

我想在我的数据框中添加一个新列,根据字母表中的字母所在的列表对它们进行分组。如果这是 SQL,我会编写如下内容:

%let early_alph = ('A','B','C'....'M');
%let late_alph = ('N','O','P'....'Z');

create table my_df as 
 select 
  letters, 
  case when letters IN &early_alph. then 'early_alph' 
       when letters IN &late_alph then 'late_alph' 
       else 'unknown' end as 'Alph_group'
from my_table;

我想要的输出是:

字母 Alph_group

C Early_alph

Z Late_alph

中号early_alph

早期阿尔夫

B Early_alph

Olate_alph

我对 Python 和 pandas 非常陌生,但在我的研究中,Numpy 的 np.where 似乎很有前途,但我发现的每个示例都针对一个值(而不是值列表)进行测试。任何帮助将不胜感激。

最佳答案

您可以使用numpy.where + isin:

import pandas as pd
import numpy as np

设置:

letters = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')    ​
df = pd.DataFrame(np.random.choice(letters, 10), columns=['letters'])
early_alph = letters[:13]
late_alph = letters[13:]

df['cat'] = np.where(df.letters.isin(early_alph), 'early_alph',
            np.where(df.letters.isin(late_alph), 'late_alph', 'unkown'))
​
df
#letters       cat
#0    B early_alph
#1    Y  late_alph
#2    W  late_alph
#3    U  late_alph
#4    A early_alph
#5    K early_alph
#6    J early_alph
#7    C early_alph
#8    A early_alph
#9    C early_alph

或者另一个选项,从 early_alphlate_alph 列表创建一个字典,将 letter 映射到类别,然后使用 map 方法:

dd = dict([(early, 'early_alph') for early in early_alph] + 
          [(late, 'late_alph') for late in late_alph])

df['cat'] = df.letters.map(dd).fillna('unkown')
df
#letters       cat
#0  B   early_alph
#1  Y    late_alph
#2  W    late_alph
#3  U    late_alph
#4  A   early_alph
#5  K   early_alph
#6  J   early_alph
#7  C   early_alph
#8  A   early_alph
#9  C   early_alph

关于python - 如果值位于列表中,则将条件列添加到数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46209838/

相关文章:

python - Matplotlib:如何制作 Numpy 数组中值计数的堆叠图

python - 如何计算数据框 pandas-python 中值的条件概率?

python - 在 matplotlib 中设置分组条形图之间的间距

python - 在测试执行期间更改日志记录级别

python - 如何在 WTForms 中使用 "tel"、 "number"或其他输入类型?

python - 继承模型元类的正确语法?

python - 合并列上的多个数据框

python系列在data frame错误中有歧义

python - (n,) 在 numpy 和向量的上下文中意味着什么?

python - 根据另一个表中的多个列在一个表中创建一列 [python]