假設我有一個包含以下元素的資料框:
Element
0 a_1
1 a_2
2 b_1
3 a_3
4 b_2
.....
等等。
現在假設我有兩個類別A和B. 每個元素都屬于這些類別之一,假設我有串列As = [a_1, a_2, ...]和Bs = [b_1, b_2, ...]
我想要做的是Category向df添加一列:
Element Category
0 a_1 A
1 a_2 A
2 b_1 B
3 a_3 A
4 b_2 B
.....
也就是說,我們將查詢 df 的每一行,檢查元素是否在這些串列之一中,并且新列的值將是它所在的串列。每個元素都將在這些串列之一中。
我該怎么做呢?
我已經考慮通過檢查每一行來通過 for 回圈為新列創建一個新陣列,但我覺得應該有一種更時尚、更 Pythonic 的方式來做到這一點。
uj5u.com熱心網友回復:
而不是串列,使用字典并將其反轉以使用 with map:
d = {'A': ['a_1', 'a_2', 'a_3'],
'B': ['b_1', 'b_2'],
}
d2 = {k: v for v, l in d.items() for k in l}
df['Category'] = df['Element'].map(d2)
輸出:
Element Category
0 a_1 A
1 a_2 A
2 b_1 B
3 a_3 A
4 b_2 B
uj5u.com熱心網友回復:
使用np.where和numpy.in1d
- np.where -- 根據條件回傳從 x 或 y 中選擇的元素。
- numpy.in1d——測驗一維陣列的每個元素是否也存在于第二個陣列中。
代碼
# Add column Category by Assigning 'A' if the element in list A else assign 'B'
df['Category'] = np.where(np.in1d(df['Element'], A), 'A', 'B')
在哪里:
A = ['a_1', 'a_2', 'a_3']
# B not needed since "Every element falls into one of these categories" (i.e. in B if not in A)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530649.html
標籤:Python熊猫麻木的
