簡體   English   中英

熊貓過濾器數據框用於正值和負值

[英]Pandas filter dataframe for positive and negative values

我有3列的熊貓數據框,其中:

  • 類別dtype-字符串
  • 日期dtype-日期時間
  • 值dtype-浮點數

     df = pd.DataFrame() df['category'] = ['a', 'b', 'b', 'b', 'c', 'a', 'b', 'c', 'c', 'a'] df['date'] = ['2018-01-01', '2018-01-01', '2018-01-03', '2018-01-05', '2018-01-01', '2018-01-02', '2018-01-06', '2018-01-03', '2018-01-04','2018-01-01'] df['values'] = [1, 2, -1.5, 2.3, 5, -0.7, -5.2, -5.2, 1, -1.1] df 

數據框視圖

我想篩選出每個類別中具有接近該日期的正值和負值(差異最小)的行。

因此,基本上,輸出看起來像:

df = pd.DataFrame()
df['category'] = ['a', 'a','b', 'b', 'c', 'c']
df['date'] = ['2018-01-01', '2018-01-01', '2018-01-01', '2018-01-03', '2018-01-01', '2018-01-03']
df['values'] = [1, -1.1, 2, -1.5, 5, -5.2]
df

過濾后的數據框

我曾在SO上查看過類似的查詢( 使用Pandas為每個過濾器標識列中 的最接近值如何找到Pandas系列中與輸入數字最接近的值?

第一個利用idxmin ,它返回第一次出現的值,而不是最接近的值。

第二個鏈接是關於特定值作為輸入的-我不認為純粹的np.argsort對我而言有效。

我可以想象使用一個復雜的if語句網絡來執行此操作,但是,我不確定最有效的方法是使用熊貓。

任何指導將不勝感激。

IIUC,首先對您的數據框進行排序,然后使用idxmin

df1 = df.sort_values(['category','date'])
df1[df1.groupby('category')['values']\
       .transform(lambda x: x.index.isin([x.ge(0).idxmin(), x.lt(0).idxmin()]))]

輸出:

  category        date  values
0        a  2018-01-01     1.0
9        a  2018-01-01    -1.1
1        b  2018-01-01     2.0
2        b  2018-01-03    -1.5
4        c  2018-01-01     5.0
7        c  2018-01-03    -5.2

暫無
暫無

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

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