簡體   English   中英

熊貓:根據條件填充南斯

[英]pandas: fill nans given a condition

我正在努力處理一些看似微不足道的事情,但顯然並非如此。 常規圖片: data -熊貓數據TOTAL_VISITS -包含(以及其他) TOTAL_VISITSNUM_PRINTS列。

目標:給定num_prints參數,找到NUM_prints = num_prints行,並用給定的數字填充nan

我停下來的地方不再有意義了:

indices= data['NUM_PRINTS'] == num_prints

data.loc[indices,'TOTAL_VISITS'].fillna(5,inplace=True)

就我所知和閱讀的內容而言,這應該起作用。 實際上沒有在nans上填充任何東西,似乎它可以處理副本或其他東西,因為它不會更改原始對象中的任何東西。

什么有效:

data.loc[indices,'TOTAL_VISITS'] = 2

這確實會在num_print條件下用2填充該列,但不考慮nans。

data['TOTAL_VISITS'].fillna(0, inplace=True)

這確實使總訪問次數中的num_prints填充為0,但不考慮num_prints條件。

我有點絕望,因為帶有.iloc的常規for循環和條件花的時間太長了,我無法處理。

我認為雙方都需要過濾器,並且僅對過濾的行應用fillna

np.random.seed(1213)

c = ['TOTAL_VISITS', 'A', 'NUM_PRINTS']
data = pd.DataFrame(np.random.choice([1,np.nan,3,4], size=(10,3)), columns=c)
print (data)
   TOTAL_VISITS    A  NUM_PRINTS
0           1.0  4.0         4.0
1           NaN  3.0         1.0
2           1.0  1.0         1.0
3           4.0  3.0         3.0
4           1.0  3.0         4.0
5           4.0  4.0         3.0
6           4.0  1.0         4.0
7           NaN  4.0         3.0
8           NaN  NaN         3.0
9           3.0  NaN         1.0


num_prints = 1
indices= data['NUM_PRINTS'] == num_prints
data.loc[indices,'TOTAL_VISITS'] = data.loc[indices,'TOTAL_VISITS'].fillna(100)
#alternative
#data.loc[indices,'TOTAL_VISITS'] = data['TOTAL_VISITS'].fillna(100)
print (data)
   TOTAL_VISITS    A  NUM_PRINTS
0           1.0  4.0         4.0
1         100.0  3.0         1.0
2           1.0  1.0         1.0
3           4.0  3.0         3.0
4           1.0  3.0         4.0
5           4.0  4.0         3.0
6           4.0  1.0         4.0
7           NaN  4.0         3.0
8           NaN  NaN         3.0
9           3.0  NaN         1.0

我認為這很好

data['TOTAL_VISITS'] = np.where(data['NUM_PRINTS'] == 1, 100, data['TOTAL_VISITS'])

不使用fillna來應用邏輯的一種方法是定義一個包含您的條件的掩碼。 然后使用此掩碼通過.loc更新系列。

以下示例適用於@jezrael中的數據。

num_prints = 1

mask = (data['NUM_PRINTS'] == num_prints) & data['TOTAL_VISITS'].isnull()

data.loc[mask, 'TOTAL_VISITS'] = 100

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM