[英]How can I make this python code more efficient?
我意識到這是一種非常低效的編碼方式,所以我希望有人能就更有效的方法提出建議。
本質上,我正在嘗試創建一個列(“freq”),NA 和“Nothing”對象的值為 0,否則為 1。 樣本 df:
i obj freq
0. Nothing 0
1. Something 1
2. NaN 0
3. Something 1
for i in range(0,len(df)):
if str(df["obj"].iloc[i]) == "Nothing" or str(df["obj"].iloc[i]) == NaN:
d["freq"].iloc[i] = 0
else:
df["freq"].iloc[i] = 1
你可以使用 np.where()
import pandas as pd
import numpy as np
df = pd.DataFrame({'obj': {0: 'Nothing', 1: 'Something', 2: np.nan, 3: 'Something'}})
df['freq'] = np.where((df['obj'] == 'Nothing') | (df['obj'].isnull()), 0, 1)
沒有 dataframe 很難檢查是否有效,但它應該
indexer = (df['obj'] == 'Nothing') | (df['obj'].astype(str) == 'NaN')
df.loc[indexer, 'freq'] = 0
df.loc[~indexer, 'freq'] = 1
在這種情況下,甚至沒有必要使用numpy
:
df['freq'] = (~(df.obj.isnull() | (df.obj == 'Nothing'))) * 1
筆記:
用“0”和“1”編碼有用嗎? 我們不能保留 boolean 操作的結果,同時保留“False”和“True”值嗎? 如果是這樣的話,答案就是:
df['freq'] = ~(df.obj.isnull() | (df.obj == 'Nothing'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.