Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果值在列表中,则向数据帧添加条件列_Python_Pandas_Numpy - Fatal编程技术网

Python 如果值在列表中,则向数据帧添加条件列

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

我有一个熊猫数据框,它有一个名为“字母”的列,它的值是字母表中的字母。所以第一行可以是“C”,下一行是“Z”,下一行是“M”,依此类推:

信件 C

Z

M

A

B

O

我还列出了字母表中的字母按其所在位置进行分组的列表,因此:

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')