[英]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.