分组数据框中的if语句和日期比较

时间:2019-03-05 13:11:35

标签: python pandas

我有一个数据集,其中包含国家/地区GEOGN的列及其历史数据。我已按国家/地区对数据进行了分组,并删除了df低于每个国家NaN的5%分位数的所有行。代码如下:

def replace(group):
    quantile = group.quantile(0.05)
    smallest_five = group < quantile
    group[smallest_five ] = np.NaN
    return group

df = df.groupby('GEOGN').apply(replace)

请考虑以下数据框:

  GEOGN  2009-06  2010-01  2010-02   ...     2011-02  2011-03  2011-04  2011-05
0   GER        1        4       10   ...           4        7        6        3
1   GER        5        6        9   ...           6        2       10        2
2   GER        1        4        7   ...           4        8        6        6
3   GER       10        9        6   ...           6        2        1        8
4   USA        9        9        5   ...          10        3        1       10
5   USA        2        4        5   ...           4        5        4        3
6   USA        3        4        3   ...           8        4        2        1
7   USA       10        2        8   ...           2        3        9        9 

现在,我想根据条件执行相同的操作。

首先,该操作应检查month < 6month > 5在每一列中是否为真。如果第一个语句为true,则它应该执行与上面稍有不同的操作。它应该将df与之前的5%分位数:outliers = group < quantile.shift(1)进行比较。

以下是我目前使用的方法的大致概念:

def replace(group):
    quantile = group.quantile(0.05)
    smallest_five = group < quantile.shift(1)
    group[smallest_five] = np.NaN
    return group

 def replace_next(group):
    quantile = group.quantile(0.05)
    smallest_five = group < quantile
    group[smallest_five] = np.NaN
    return group

for column_name in df.drop(df.columns[range(1)], axis=1):
    column_date = pd.to_datetime(column_name)
    if column_date.month < 6:
         df.groupby('GEOGN').apply(replace)
    else:
         df.groupby('GEOGN').apply(replace_next)  

赞赏任何建议。

0 个答案:

没有答案