假設我有以下資料幀:
df = pd.DataFrame({'a': [12, 34, -45], 'b':[-24, 36, 48], 'c':[28, -14, 68]})
df:
a b c
12 -24 28
34 36 -14
-45 48 68
我希望回傳第一列的索引( 1)以在每行中包含一個負數,因此對于我將生成的示例:
a b c first_neg_col
12 -24 28 2
34 36 -14 3
-45 48 68 1
我有實作這一目標的方法:
def first_negval(val_list):
for idx, val in enumerate(val_list):
if val < 0:
return idx 1
df['first_neg_col'] = df[:].values.tolist()
df.first_neg_col= df['first_neg_col'].apply(lambda x: first_negbal(x))
但這似乎很麻煩/效率低下。我想知道是否有更矢量化的方法/某種使用串列理解的方法?
uj5u.com熱心網友回復:
如果始終存在至少一個負值,則numpy.argmax用于第一個負值,而不是0:
df['first_neg_col'] = np.argmax(df.lt(0).to_numpy(), axis=1) 1
print (df)
a b c first_neg_col
0 12 -24 28 2
1 34 36 -14 3
2 -45 48 68 1
通常需要測驗,如果存在至少一個負和設定為0在numpy.where與DataFrame.any:
df = pd.DataFrame({'a': [12, 34, -45, 1], 'b':[-24, 36, 48, 8], 'c':[28, -14, 68, 8]})
m = df.lt(0)
df['first_neg_col'] = np.where(m.any(axis=1), np.argmax(m.to_numpy(), axis=1) 1, 0)
print (df)
a b c first_neg_col
0 12 -24 28 2
1 34 36 -14 3
2 -45 48 68 1
3 1 8 8 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/329044.html
上一篇:減去陣列內的專案
