Python 将行分摊到其他行

Python 将行分摊到其他行,python,python-3.x,pandas,Python,Python 3.x,Pandas,有没有一种简单的方法可以将行分配到另一行 我想把这个未知的国家分给所有其他国家。在本例中,有2个国家。 对于给定日期,UK=UK+(UK*未知)/sum(UK+US) 使用groupby计算您在给定日期拥有多少“未知”资产,以及您在所有其他国家/地区拥有多少资产。确保.fillna(0)以防有一个没有任何“未知”的日期,以便稍后的数学运算不会导致NaN。然后我们可以合并这些信息并执行计算 cols = ['col1', 'col2'] df1 = df.groupby(['date', df.c

有没有一种简单的方法可以将行分配到另一行

我想把这个未知的国家分给所有其他国家。在本例中,有2个国家。
对于给定日期,UK=UK+(UK*未知)/sum(UK+US)


使用
groupby
计算您在给定日期拥有多少“未知”资产,以及您在所有其他国家/地区拥有多少资产。确保
.fillna(0)
以防有一个没有任何“未知”的日期,以便稍后的数学运算不会导致
NaN
。然后我们可以合并这些信息并执行计算

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])

df
  date       country col1  col2 
2019-12-20    UK      1    10
2019-12-20    Unknown 5    20
2019-12-20    USA     7    30
...


Expected Output

 df
  date       store     col1    col2 
2019-12-20    UK      1.625    15
2019-12-20    USA     11.375   45
...
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