在 pandas 中使用不同类型的 elif 创建数据框列
Create dataframe column with elif of different types in pandas
这是 question 的扩展。
我想做一些 if/elif/else 逻辑来创建数据框列,伪代码示例:
if Col1 = 'A' and Col2 = 1 then Col3 = 'A1'
else if Col1 = 'A' and Col2 = 0 then Col3 = 'A0'
else Col3 = 'XX'
可以把类型混在一起吗?我收到此错误:
TypeError: cannot compare a dtyped [int64] array with a scalar of type [bool]
我认为你可以使用:
df['Col3'] = 'XX'
df.loc[(df.Col1 == 'A') & (df.Col2 == 1), 'Col3'] = 'A1'
df.loc[(df.Col1 == 'A') & (df.Col2 == 0), 'Col3'] = 'A0'
加倍numpy.where
:
df["Col3"] = np.where((df.Col1 == 'A') & (df.Col2 == 1) , "A1",
np.where((df.Col1 == 'A') & (df.Col2 == 0), 'A0', 'XX'))
样本:
df = pd.DataFrame({'Col1':['A','B','A','B'],
'Col2':[1,1,0,0]})
print (df)
Col1 Col2
0 A 1
1 B 1
2 A 0
3 B 0
df['Col3'] = 'XX'
df.loc[(df.Col1 == 'A') & (df.Col2 == 1), 'Col3'] = 'A1'
df.loc[(df.Col1 == 'A') & (df.Col2 == 0), 'Col3'] = 'A0'
df["Col4"] = np.where((df.Col1 == 'A') & (df.Col2 == 1) , "A1",
np.where((df.Col1 == 'A') & (df.Col2 == 0), 'A0', 'XX'))
print (df)
Col1 Col2 Col3 Col4
0 A 1 A1 A1
1 B 1 XX XX
2 A 0 A0 A0
3 B 0 XX XX
这是 question 的扩展。
我想做一些 if/elif/else 逻辑来创建数据框列,伪代码示例:
if Col1 = 'A' and Col2 = 1 then Col3 = 'A1'
else if Col1 = 'A' and Col2 = 0 then Col3 = 'A0'
else Col3 = 'XX'
可以把类型混在一起吗?我收到此错误:
TypeError: cannot compare a dtyped [int64] array with a scalar of type [bool]
我认为你可以使用:
df['Col3'] = 'XX'
df.loc[(df.Col1 == 'A') & (df.Col2 == 1), 'Col3'] = 'A1'
df.loc[(df.Col1 == 'A') & (df.Col2 == 0), 'Col3'] = 'A0'
加倍numpy.where
:
df["Col3"] = np.where((df.Col1 == 'A') & (df.Col2 == 1) , "A1",
np.where((df.Col1 == 'A') & (df.Col2 == 0), 'A0', 'XX'))
样本:
df = pd.DataFrame({'Col1':['A','B','A','B'],
'Col2':[1,1,0,0]})
print (df)
Col1 Col2
0 A 1
1 B 1
2 A 0
3 B 0
df['Col3'] = 'XX'
df.loc[(df.Col1 == 'A') & (df.Col2 == 1), 'Col3'] = 'A1'
df.loc[(df.Col1 == 'A') & (df.Col2 == 0), 'Col3'] = 'A0'
df["Col4"] = np.where((df.Col1 == 'A') & (df.Col2 == 1) , "A1",
np.where((df.Col1 == 'A') & (df.Col2 == 0), 'A0', 'XX'))
print (df)
Col1 Col2 Col3 Col4
0 A 1 A1 A1
1 B 1 XX XX
2 A 0 A0 A0
3 B 0 XX XX