gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:47:54 25 4
gpt4 key购买 nike

我有一个 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/

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