我有看似簡單的問題,基于條件,例如資料幀中的值小于 2,將值更改為 1,在相反的情況下為 0。“if-else”型別。
玩具示例,輸入:
a b
0 1 -5
1 2 0
2 3 10
輸出:
a b
0 1 1
1 0 1
2 0 0
這是我的解決方案:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [1,2,3], 'b': [-5, 0, 10]})
arr = np.where(df < 2, 1, 0)
df_fin = pd.DataFrame(data=arr, index=df.index, columns=df.columns)
我不喜歡直接依賴,numpy而且對我來說它也有點冗長。能否以更清潔、更慣用的方式完成?
uj5u.com熱心網友回復:
一般解決方案:
Pandas 是用 numpy 構建的,所以在我看來只需要匯入。這是可能的設定值df[:]
import numpy as np
df[:] = np.where(df < 2, 1, 0)
print (df)
a b
0 1 1
1 0 1
2 0 0
如果只使用 pandas 函式有點過于復雜:
m = df < 2
df = df.mask(m, 1).where(m, 0)
替換為0,1解決方案:
轉換面具地圖True來1和False到0由DataFrame.view在另一個答案或類似:
df = (df < 2).view('i1')
uj5u.com熱心網友回復:
Pandas 的替換在這里可能很方便:
df.lt(2).replace({False : 0, True: 1})
Out[7]:
a b
0 1 1
1 0 1
2 0 0
或者您只需將布林值轉換為整數:
df.lt(2).astype(int)
Out[9]:
a b
0 1 1
1 0 1
2 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/341071.html
