簡體   English   中英

如何根據列值的某些首選項從 DataFrame 中選擇行?

[英]How do I select rows from DataFrame based on some preferences on column values?

我正在嘗試通過從現有的 Df 中選擇行來創建一個新的 DataFrame。

東風:

ID    val1    val2     uniq
A      10       0       1-2
A      10       0       3-2
B      10       0       8-0
B      9        1       7-6
B      8        2       9-3
c      9        1       10-3
c      9        1       3-0

根據 col val1 和 val2 上的首選項,我只希望每個 ID 有 2 行:

1) val1 == 10 & val2 == 0 (first preference)
2) val1 == 9 & val2 == 1  (second preference)
3) val1 == 8 & val2 == 2 (third preference)

所需輸出:

 ID    val1    val2     uniq
 A      10       0       1-2
 A      10       0       3-2
 B      10       0       8-0
 B      9        1       7-6
 c      9        1       10-3
 c      9        1       3-0

在熊貓中有沒有有效的方法來做到這一點? 謝謝你的時間!

df.sort_values(['val1', 'val2'], ascending=[False, True]).groupby('ID').head(2)
 
  ID  val1  val2  uniq
0  A    10     0   1-2
1  A    10     0   3-2
2  B    10     0   8-0
3  B     9     1   7-6
5  c     9     1  10-3
6  c     9     1   3-0

編輯:

如果可能存在其他類型的組合但只考慮上述三種組合,則執行以下操作:

a = (df[['val1', 'val2']].astype(str)
     .apply(' '.join, axis = 1).astype('category'))    
order = ['10 0', '9 1', '8 2']
levels = np.r_[order, a.cat.remove_categories(order).cat.categories]
df['a'] = a.cat.reorder_categories(levels).cat.as_ordered()
df.sort_values('a').groupby('ID').head(2).drop(columns='a')

  ID  val1  val2  uniq
0  A    10     0   1-2
1  A    10     0   3-2
2  B    10     0   8-0
3  B     9     1   7-6
5  c     9     1  10-3
6  c     9     1   3-0

按照你的喜好,我做到了

df  = {'ID':['A', 'A', 'B', 'B', 'B', 'C', 'C'],
              'val1': [10,10,10,9,8,9,9],
              'val2': [0,0,0,1,2,1,1]}
df = pd.DataFrame(df)
df1 = df[(df['val1'] == 10) & (df['val2'] == 0)][:2]
df2 = df[(df['val1'] == 9) & (df['val2'] == 1)][:2]
df3 = df[(df['val1'] == 8) & (df['val2'] == 2)][:2]

df4 = df1.append(df2)
df = df4.append(df3)
df.sort_values(['ID'])

輸出

在此處輸入圖像描述

沒有偏好

df.groupby(['ID']).head(2)

輸出

在此處輸入圖像描述

暫無
暫無

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

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