簡體   English   中英

使用組過濾器,當列值在另一個行列值的范圍內時,熊貓選擇行

[英]Pandas select rows when column value within range from another row column value with group filter

我想擴展一個我在問題鏈接上提出的問題

情況比較復雜,所以我認為那里的解決方案不適合

我正在嘗試使用以下格式從數據框(100k-500k行)創建子集

d = {'time':[1,2,3,5,7,9,9.5,10], 'val':['not','match','match','not','not','match','match','match'],
    'group':['a','a','b','b','b','a','a','c']}
df = pd.DataFrame(d)
print(df)
  group  time    val
0     a   1.0    not
1     a   2.0  match
2     b   3.0  match
3     b   5.0    not
4     b   7.0    not
5     a   9.0  match
6     a   9.5  match
7     c  10.0  match

當時間在有限范圍內時,我想選擇一個包含所有行的子集。 例如,如果范圍<= 1,則選擇第一行和最后三行,它們來自不同的組

  • row0具有有效的時間差異(row1-row0),但它們在同一組中。
  • row1具有有效的時間差異(row2-row1),並且每個都有不同的組。
  • row5具有有效的時間差異(row7-row5),並且每個都有不同的組。
  • row6具有有效的時間差異(row7-row6),並且每個都有不同的組。

而我想要的輸出

  group  time    val
1     a   2.0  match
2     b   3.0  match
5     a   9.0  match
6     a   9.5  match
7     c  10.0  match

這適用於您的示例,希望適用於您的數據:

df.loc[((df['time'].diff() <= 1)|(df['time'].diff(-1) >= -1))&((df['group']!=df['group'].shift(-1).fillna(df['group']))|(df['group']!=df['group'].shift(1).fillna(df['group'])))]

暫無
暫無

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

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