[英]Pandas DataFrame create new csv column based on two other columns
[英]How to create pandas dataframe variable/column based on two or more other variables?
我有一個pandas數據幀,例如:
Col1 Col2
A 1
B 2
C 3
我理解如何基於Col2的值來創建Col3:
df['Col3'] = (df['Col2'] <= 1).astype(int)
但是......如果新列基於兩個變量,如(偽代碼):
if Col2=1 and Col3=1 then Col4='X'
else if Col2=1 and Col3=2 then Col4='Y'
else Col4='Z'
怎么會實現? 非常感謝
你可以嘗試雙numpy.where
:
df['Col4'] = np.where((df['Col2'] == 1) & (df['Col3'] == 1), 'X',
np.where((df['Col2'] == 1) & (df['Col3'] == 2), 'Y', 'Z'))
樣品:
import pandas as pd
df = pd.DataFrame({'Col2': {0: 1, 1: 1, 2: 3},
'Col1': {0: 'A', 1: 'B', 2: 'C'},
'Col3': {0: 1, 1: 2, 2: 4}})
print (df)
Col1 Col2 Col3
0 A 1 1
1 B 1 2
2 C 3 4
df['Col4'] = np.where( (df['Col2'] == 1) & (df['Col3'] == 1), 'X',
np.where((df['Col2'] == 1) & (df['Col3'] == 2), 'Y', 'Z'))
print (df)
Col1 Col2 Col3 Col4
0 A 1 1 X
1 B 1 2 Y
2 C 3 4 Z
使用loc
和fillna
另一個解決方案,用於填充NaN
所有其他值:
df.loc[ (df['Col2'] == 1) & (df['Col3'] == 1) , 'Col4'] = 'X'
df.loc[ (df['Col2'] == 1) & (df['Col3'] == 2) , 'Col4'] = 'Y'
df['Col4'] = df['Col4'].fillna('Z')
print (df)
Col1 Col2 Col3 Col4
0 A 1 1 X
1 B 1 2 Y
2 C 3 4 Z
您可以使用最終的else
值(例如Z
)初始化列,然后檢查每個條件:
df['Col4'] = 'Z'
df.loc[(df.Col1 == 1) & (df.Col3 == 1), 'Col4'] = 'X'
df.loc[(df.Col2 == 1) & (df.Col3 == 2), 'Col4'] = 'Y'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.