我有三个数据框 df_Male , df_female , Df_TransGender
示例数据框
df_Male
continent avg_count_country avg_age
Asia 55 5
Africa 65 10
Europe 75 8
df_Female
continent avg_count_country avg_age
Asia 50 7
Africa 60 12
Europe 70 0
df_Transgender
continent avg_count_country avg_age
Asia 30 6
Africa 40 11
America 80 10
现在我像下面这样连接
frames = [df_Male, df_Female, df_Transgender]
df = pd.concat(frames, keys=['Male', 'Female', 'Transgender'])
如您所见,America
出现在 df_transgender
中,欧洲同样出现在 df_Male
和 df_Female
中
所以我必须以某种方式连接它,使其看起来像下面但不是手动的,因为可能有大量的行
continent avg_count_country avg_age
Male 0 Asia 55 5
1 Africa 65 10
2 Europe 75 8
3 America 0 0
Female 0 Asia 50 7
1 Africa 60 12
2 Europe 70 0
3 America 0 0
Transgender 0 Asia 30 6
1 Africa 40 11
2 America 80 10
3 Europe 0 0
所以对于其他 continent
值 avg_count_country
和 avg_age
应该是 0
最佳答案
您可以在连接之前添加“性别”列。
我们使用 Categorical Data用 groupby
计算笛卡尔积。这也应该会产生性能优势。
df = pd.concat([df_Male.assign(gender='Male'),
df_Female.assign(gender='Female'),
df_Transgender.assign(gender='Transgender')])
for col in ['gender', 'continent']:
df[col] = df[col].astype('category')
res = df.groupby(['gender', 'continent']).first().fillna(0).astype(int)
print(res)
avg_count_country avg_age
gender continent
Female Africa 60 12
America 0 0
Asia 50 7
Europe 70 0
Male Africa 65 10
America 0 0
Asia 55 5
Europe 75 8
Transgender Africa 40 11
America 80 10
Asia 30 6
Europe 0 0
关于python - 如何连接/加入这三个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327745/