簡體   English   中英

如何根據列表有條件地更新Pandas中的DataFrame列

[英]How to conditionally update DataFrame column in Pandas based on list

假設我有一個包含一列的數據框:

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']中的值顯示'even'或'odd'

就像是:

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

我想你可以使用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

地圖版本:

首先,創建一個字典:

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

然后在系列上使用地圖:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM