Значения тегов в зависимости от условий нескольких столбцов - PullRequest
0 голосов
/ 22 марта 2019

Предположим, что у меня есть этот минимальный DataFrame для представления моих потребностей:

    Tag   Year   Month   Snowed 
0    0    2001    Jan     True
1    0    2001    Feb     False 
2    0    2001    Mar     True
3    0    2002    Jan     True
4    0    2002    Feb     True
5    0    2002    Mar     False

Как я могу заполнить столбец Tag так, чтобы для каждого года он был помечен как BAD, если выпал снег как в январе, так и в феврале, или в GOODв противном случае?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Я бы использовал transform, all и ffill:

df['Tage']=df.loc[df.Month.isin(['Jan','Feb'])].groupby('Year')['Snowed'].transform('all').map({False:'Good',True:'Bad'})
df.ffill(inplace=True)
df
Out[262]: 
   Tag  Year Month  Snowed  Tage
0    0  2001   Jan    True  Good
1    0  2001   Feb   False  Good
2    0  2001   Mar    True  Good
3    0  2002   Jan    True   Bad
4    0  2002   Feb    True   Bad
5    0  2002   Mar   False   Bad

s=df.loc[df.Month.isin(['Jan','Feb'])].groupby('Year')['Snowed'].agg('all').map({False:'Good',True:'Bad'})

Затем map назад

df['Tage']=df.Year.map(s)
0 голосов
/ 22 марта 2019

Наряду с ответом выше, это также работает. Этот код может быть менее запутанным, хотя.

Поскольку нам не нужны данные за март по вашему вопросу: df = df[(df.Month != 'Mar')]

def True_Or_Not(df):
    Result = df['Snowed'].all(axis=None) == True
    df['Result'] = Result
    return df

Столбец Год года и столбец агрегированного месяца, чтобы определить, являются ли все значения истинными

df  = df.groupby(['Year']).apply(lambda df: True_Or_Not(df)).reset_index().drop(columns = ['index'])
df['Tag'] = ['Good' if i== False else 'Bad' for i in df.Result.tolist()]

ВЫВОД:

    Tag     Year    Month   Snowed  Result
0   Good    2001    Jan    True     False
1   Good    2001    Feb    False    False
2   Bad     2002    Jan    True     True
3   Bad     2002    Feb    True     True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...