Панды, нарезающие между датами, затем заменяют значения нулями - PullRequest
0 голосов
/ 20 января 2019

У меня есть следующий DataFrame:

Channel     Column 1    Column 2    Column 3
Date            
12/30/2018  638         4472        487
12/31/2018  868         6985        540
1/1/2019    755         4401        829
1/2/2019    1655        9484        1145
1/3/2019    2002        14212       1158
1/4/2019    1633        9575        1098
1/5/2019    1026        5575        941
1/6/2019    1025        4963        1007
1/7/2019    1944        10685       1246
1/8/2019    2140        9932        1151
1/9/2019    2067        1031        1087
1/10/2019   2168        1005        1074
1/11/2019   2052        9371        909
1/12/2019   1223        5953        895
1/13/2019   1268        4809        827

Я хотел бы вернуть следующий результат, если это возможно [существенно уменьшить значения между определенными датами в определенном столбце до нуля]

Channel     Column 1    Column 2    Column 3
Date            
12/30/2018  638         4472        487
12/31/2018  868         6985        540
1/1/2019    755         4401        829
1/2/2019    1655        9484        1145
1/3/2019    2002        14212       1158
1/4/2019    1633        9575        1098
1/5/2019    1026        5575        941
1/6/2019    0           4963        1007
1/7/2019    0           10685       1246
1/8/2019    0           9932        1151
1/9/2019    0           1031        1087
1/10/2019   2168        1005        1074
1/11/2019   2052        9371        909
1/12/2019   1223        5953        895
1/13/2019   1268        4809        827

Я пытаюсь фильтровать по определенному столбцу в определенные даты, но не могу заставить его работать должным образом.

Я попробовал следующие подходы, но мне не очень повезло

df[df['Channel'] == 'Branded Paid Search'].loc['1/6/2019':'1/9/2019']['Sessions'].apply(lambda x: 0 if x < 4000 else 0).to_frame()

Это работает, но не уверен, как вернуть значения в исходный фрейм данных.

Я попробовал это:

def zero(df):
  if df[df['Column 1'] > 0].loc['1/6/2019':'1/9/2019']:
    return 0
  else:
    return 1

df.apply(zero, axis=1)

ValueError: ('The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().')

Я попробовал это:

sessions_df[sessions_df['Column 1'] > 0].loc['1/6/2019':'1/9/2019'] = 0

Ничего не меняется.

Буду признателен за любую помощь

1 Ответ

0 голосов
/ 20 января 2019

Сначала создайте DatetimeIndex с помощью to_datetime, а затем установите значения с помощью DataFrame.loc:

df.index = pd.to_datetime(df.index)

df.loc['1/6/2019':'1/9/2019', 'Column 1'] = 0
print (df)
            Column 1  Column 2  Column 3
Channel                                 
2018-12-30       638      4472       487
2018-12-31       868      6985       540
2019-01-01       755      4401       829
2019-01-02      1655      9484      1145
2019-01-03      2002     14212      1158
2019-01-04      1633      9575      1098
2019-01-05      1026      5575       941
2019-01-06         0      4963      1007
2019-01-07         0     10685      1246
2019-01-08         0      9932      1151
2019-01-09         0      1031      1087
2019-01-10      2168      1005      1074
2019-01-11      2052      9371       909
2019-01-12      1223      5953       895
2019-01-13      1268      4809       827
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...