如何根据列表有条件地更新 Pandas 中的 DataFrame 列

Posted

技术标签:

【中文标题】如何根据列表有条件地更新 Pandas 中的 DataFrame 列【英文标题】:How to conditionally update DataFrame column in Pandas based on list 【发布时间】:2016-10-24 21:56:45 【问题描述】:

假设我有一个包含一列的数据框:

df = pd.DataFrame(np.random.randint(0,9,size=(100, 1)), columns=['number'])

我有两个列表,一个包含偶数,另一个包含奇数。

odd_numbers = [1,3,5,7,9]
even_numbers = [0,2,4,6,8]

我想根据 df['number'] 中的值在数据框上创建另一个系列,显示“偶数”或“奇数”

类似:

df['odd_or_even'] = 'even' if df[number].isin(even_numbers)
df['odd_or_even'] = 'odd' if df[number].isin(odd_numbers)

【问题讨论】:

重要的是列表是条件检查。 【参考方案1】:

map 版本:

首先,创建一个字典:

d = **o: "odd" for o in odd_numbers, **e: "even" for e in even_numbers

然后在系列上使用地图:

df['odd_or_even'] = df['number'].map(d)

【讨论】:

【参考方案2】:

我觉得你可以用numpy.where:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,9,size=(100, 1)), columns=['number'])

df['odd_or_even'] = np.where(df.number % 2, 'odd', 'even')
print (df)

    number odd_or_even
0        1         odd
1        0        even
2        4        even
3        5         odd
4        0        even
5        0        even
6        1         odd
7        0        even
8        7         odd
9        8        even

通过评论编辑

使用loc:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,9,size=(20, 1)), columns=['number'])

odd_numbers = [1,3,5,7,9]
even_numbers = [0,2,4,6,8]

df.loc[df.number.isin(odd_numbers), 'odd_or_even'] = 'odd'
df.loc[df.number.isin(even_numbers), 'odd_or_even'] = 'even'

print (df)
    number odd_or_even
0        5         odd
1        1         odd
2        2        even
3        3         odd
4        5         odd
5        6        even
6        3         odd
7        4        even
8        2        even
9        8        even
10       8        even
11       1         odd
12       2        even
13       1         odd
14       3         odd
15       3         odd
16       5         odd
17       4        even
18       2        even
19       5         odd

【讨论】:

我已经为这个例子简化了我的数据框。我实际上并没有检查奇数或偶数。我需要对照列表检查现有系列的元素。

以上是关于如何根据列表有条件地更新 Pandas 中的 DataFrame 列的主要内容,如果未能解决你的问题,请参考以下文章

Python根据列表中的条件更改字符串的一部分

如何使用 python 或 pandas 根据包含字典列表的列过滤 DataFrame?

使用 pandas 根据条件将 csv 值附加到列表

如何根据条件行值对 pandas 数据框进行取消堆叠或取消透视?

Pandas中的五种数据查询方法--数值,列表,区间,条件,函数查询

根据存储在 data.frame 中的单独字符向量,有条件地重命名列表中的列