Python 合并具有不同结构的两个数据帧
我正在尝试将两个数据帧相互组合。但我还是停留在逻辑上(也许我对这个问题看得太久了) 问题: DF1的格式如下:Python 合并具有不同结构的两个数据帧,python,pandas,data-wrangling,Python,Pandas,Data Wrangling,我正在尝试将两个数据帧相互组合。但我还是停留在逻辑上(也许我对这个问题看得太久了) 问题: DF1的格式如下: Country ID March April May June Netherlands A 10 20 15 14 Netherlands B 15 18 10 4 Germany C 9 8 3 1 然后,我有另一个数
Country ID March April May June
Netherlands A 10 20 15 14
Netherlands B 15 18 10 4
Germany C 9 8 3 1
然后,我有另一个数据帧:
DF2
我想合并这两列(格式与DF1相同)。
我的假设是,is应该类似于,groupby(Country+ID),然后(Month作为列,求和数字)。-但正如前面所说,我感到困惑
期望输出:
Country ID March April May June df2_Jan df2_March df2_April
Netherlands A 10 20 15 14 0 36 #8+28 0
Netherlands B 15 18 10 4 0 0 18
Germany C 9 8 3 1 9 0 0
希望你能帮助我。提前多谢 您可以尝试:
merged_df = (
df1.merge(
df2.pivot_table(
index=['Country', 'ID'],
columns='Month',
values='Number',
aggfunc=sum,
fill_value=0)
.add_prefix('df2_')
.reset_index(),
on=['Country', 'ID']
)
)
输出:
Country ID March April May June df2_April df2_Jan df2_March
0 Netherlands A 10 20 15 14 0 0 36
1 Netherlands B 15 18 10 4 18 0 0
2 Germany C 9 8 3 1 0 9 0
- DF2中的求和实际上是一个简单的
操作groupby().sum()
现在有了一个具有3级索引的系列df2 = df2.groupby(['Country', 'ID', 'Month'])['Number'].sum()
- 它似乎使DF2与DF1的格式相同,您只需要一个
,它将一个索引级别旋转到列.unstack()
df2 = df2.unstack('Number', fill_value=0)
- 以相同格式合并现在很容易
df1.merge(df2.add_prefix('df2_').reset_index(), on=['Country', 'ID'])
根据@Nk03的回答,步骤1和步骤2可以替换为使用
aggfunc
参数调用.pivot\u table
。你看过这个了吗:aggfunc在理想情况下不应该是np.sum
(因为每个文档的默认值似乎是np.mean
)?这也是pivot_表文档中的示例所建议的。我不知道为什么,但它们似乎并不完全相同,例如,请参见sum(pd.Series([1,np.nan])
vs.np.sum(pd.Series([1,np.nan])
。@Cimbali,我正在用0填充nan值。所以,我想在这种特殊情况下这并不重要。
df1.merge(df2.add_prefix('df2_').reset_index(), on=['Country', 'ID'])