Python 如果值在列表中,则向数据帧添加条件列
我有一个熊猫数据框,它有一个名为“字母”的列,它的值是字母表中的字母。所以第一行可以是“C”,下一行是“Z”,下一行是“M”,依此类推: 信件 C Z M A B O 我还列出了字母表中的字母按其所在位置进行分组的列表,因此:Python 如果值在列表中,则向数据帧添加条件列,python,pandas,numpy,Python,Pandas,Numpy,我有一个熊猫数据框,它有一个名为“字母”的列,它的值是字母表中的字母。所以第一行可以是“C”,下一行是“Z”,下一行是“M”,依此类推: 信件 C Z M A B O 我还列出了字母表中的字母按其所在位置进行分组的列表,因此: early_alph = ['A','B','C'....'M'] late_alph = ['N','O','P'....'Z'] 我想在我的数据框中添加一个新列,根据字母表中的字母在哪个列表中进行分组。如果这是SQL,我将编写如下内容: %let early_al
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;
我希望得到的结果是:
letters Alph_group
C早阿尔普
Z late_alph
我很早就到了
早期阿尔卑斯山
早阿尔夫酒店
O late_alph
我对Python和pandas非常陌生,但在我的研究中,似乎Numpy的np.where很有希望,但我发现的每个示例都是针对一个值(而不是一个值列表)进行测试的。非常感谢您的帮助。您可以使用
numpy。其中+isin
:
import pandas as pd
import numpy as np
设立:
或者另一个选项,从early_alph
和late_alph
列表创建一个字典,从字母
映射到类别,然后使用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
一种方法是使用嵌套的where
np.where(df.letters.between('A', 'M'), 'early_alph', np.where(df.letters.between('N','Z'), 'late_alph', 'unknown')
我们中的一些人并不真正了解SQL。一些预期产出会有所帮助。
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
np.where(df.letters.between('A', 'M'), 'early_alph', np.where(df.letters.between('N','Z'), 'late_alph', 'unknown')