如何使用变换来使用pandas基于多个条件提取特征

时间:2014-01-09 20:06:27

标签: python pandas

我试图按组选择满足条件的最短日期并将其分配给新列:

Group    bool    date
  A       n      2000-01-01
  A       n      2000-03-02
  A       y      2000-04-10
  A       y      2001-01-01
  B       n      2000-02-20
  B       y      2000-03-15
  B       y      2000-04-27
  B       y      2001-01-10

这将成为:

Group    bool    date          trigger_date
  A       n      2000-01-01    2000-04-10
  A       n      2000-03-02    2000-04-10
  A       y      2000-04-10    2000-04-10
  A       y      2001-01-01    2000-04-10
  B       n      2000-02-20    2000-03-15
  B       y      2000-03-15    2000-03-15
  B       y      2000-04-27    2000-03-15
  B       y      2001-01-10    2000-03-15

我一直在尝试将groupby与transform结合使用,但不知道如何根据其他列来考虑条件进行转换。

1 个答案:

答案 0 :(得分:2)

首先将bool列更改为实际的布尔值(也要注意您的名称.DataFrame有bool方法):

In [51]: df['bool'] = df['bool'].replace({'n': False, 'y': True})

查找最短日期非常简单。使用bool列索引df

In [51]: dates = df[df['bool']].groupby("Group")['date'].first()

In [52]: dates
Out[52]: 
Group
A        2000-04-10
B        2000-03-15
Name: date, dtype: object


[2 rows x 2 columns]

可能有很多方法可以设置值,但一种方法是将Group设置为索引,将join设置为dates

In [117]: df.set_index('Group').join(dates, rsuffix='_trigger')
Out[117]: 
        bool        date date_trigger
Group                                
A      False  2000-01-01   2000-04-10
A      False  2000-03-02   2000-04-10
A       True  2000-04-10   2000-04-10
A       True  2001-01-01   2000-04-10
B      False  2000-02-20   2000-03-15
B       True  2000-03-15   2000-03-15
B       True  2000-04-27   2000-03-15
B       True  2001-01-10   2000-03-15