Utiliser un groupby
pour déterminer le nombre d'"inconnus" à une date donnée et le nombre d'inconnus dans tous les autres pays. Veillez à .fillna(0)
dans le cas d'une date sans "Inconnu", afin que le calcul fonctionne par la suite sans aboutir à NaN
. Nous pouvons ensuite fusionner ces informations et effectuer le calcul.
cols = ['col1', 'col2']
df1 = df.groupby(['date', df.country.eq('Unknown')])[cols].sum().unstack(-1).fillna(0)
df1.columns = [f'{x}_{y}' for x,y in df1.columns]
# col1_False col1_True col2_False col2_True
#date
#2019-12-20 8 5 40 20
# Bring over values and remove Unknown rows
df = df.merge(df1, on='date').query('country != "Unknown"')
# date country col1 col2 col1_False col1_True col2_False col2_True
#0 2019-12-20 UK 1 10 8 5 40 20
#2 2019-12-20 USA 7 30 8 5 40 20
# Calculate and then drop helper columns
for col in cols:
df[col] = df[col]*(1+df[f'{col}_True']/df[f'{col}_False'])
df = df.drop(columns=[x for x in df.columns if 'True' in x or 'False' in x])
date country col1 col2
0 2019-12-20 UK 1.625 15.0
2 2019-12-20 USA 11.375 45.0