python - 如何按特定列分配新的值列?

标签 python function pandas

我有这样的数据:

Id     Date   
12     2017
12     2016
13     2014
13     2013
14     2017
14     2015
14     2016

我还有一个 ID 列表,如果 Id 在“check_list”中,则应分配一个值“On”,否则分配“Off”:

check_list= [12,13]

所以数据应该是这样的:

Id      Date    Check
12      2017    On
12      2016    On
13      2014    On
13      2013    On
14      2017    Off
14      2015    Off
14      2016    Off

代码

我试图定义一个函数,但我不知道为什么它只返回 id,这是代码:

def check():                           
     if df['Id'] in check_list:
         return 'On'
     else:
         return 'Off'


f['Check'] = df['Id'].apply(check()) 

最佳答案

您尝试.apply 的函数是错误的,此外,您没有传递该函数,而是调用该函数并传递结果:

所以,你可以这样做:

In [20]: def check(x):
    ...:      if x in check_list:
    ...:          return 'On'
    ...:      else:
    ...:          return 'Off'
    ...:

In [21]: df['Id'].apply(check)
Out[21]:
0     On
1     On
2     On
3     On
4    Off
5    Off
6    Off
Name: Id, dtype: object

不使用 apply 的替代方法是使用 pd.Series.isinnumpy.where,因此,给定:

In [23]: df
Out[23]:
   Id  Date
0  12  2017
1  12  2016
2  13  2014
3  13  2013
4  14  2017
5  14  2015
6  14  2016

In [24]: check_list = [12, 13]

你可以使用isin:

In [25]: df['Id'].isin(check_list)
Out[25]:
0     True
1     True
2     True
3     True
4    False
5    False
6    False
Name: Id, dtype: bool

所以,像这样:

In [26]: df['Check'] = np.where(df['Id'].isin(check_list), 'On', 'Off')

In [27]: df
Out[27]:
   Id  Date Check
0  12  2017    On
1  12  2016    On
2  13  2014    On
3  13  2013    On
4  14  2017   Off
5  14  2015   Off
6  14  2016   Off

您还可以使用 pd.Series.map:

mapping = dict.fromkeys(check_list, 'On')
df['Check'] = df['Id'].map(mapping).fillna('Off')

df

   Id  Date Check
0  12  2017    On
1  12  2016    On
2  13  2014    On
3  13  2013    On
4  14  2017   Off
5  14  2015   Off
6  14  2016   Off

关于python - 如何按特定列分配新的值列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46867841/

相关文章:

python - 如何矢量化 Pandas 函数,该函数计算属于一个组且介于两个日期之间的行?

python - pandas 匹配/比较多列

python - 如何切片生成器对象或迭代器?

python - 使用 Python 检查电子邮件是否真实

c - strdup() - 它在 C 中的作用是什么?

android - 从另一个文件调用 gradle resValue 会导致 "Error:Gradle DSL method not found: ' resValue( )'"

javascript - 函数对象是否必要

python - 多个指标的相关性

python - 在Eclipse Pydev控制台和Idle中打印Unicode

python - 如何在每次循环中将 y 的值加一