Pandas组合两个数据帧将列的子集附加到输出表的行中

2024-05-13 22:59:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想合并两个数据帧,并在输出数据帧中生成列行的子集。 这两个表格如下:


表Stk

stk = pd.DataFrame({'code':['A121','H812','Z198'],'01-05-2021':[4,2,6],'02-05-2021':[1,3,2],'03-05-2021':[12,13,12]})

桌上支持

sup = pd.DataFrame({'code':['A121','H812','S222'],'01-05-2021':[2,2,2],'03-05-2021':[5,5,5],'06-05-2021':[1,4,7]})

输出表


关于如何创建输出表的简要说明:

  1. 输出表需要有stk table和sup table中所有日期列的并集
  2. 输出表还需要有两行,以便合并两个表中的每个代码
  3. 需要在输出表的相应单元格中指定每个表中与代码和日期相关的相应值
  4. 如果值不存在,则在输出表中将其标记为np.nan

我希望这是清楚的。对此,如有任何建议或帮助,将不胜感激。我尝试在两个表上使用merge和外部联接,但这会创建额外的日期列。我不知道如何从中创建行


Tags: 数据代码dataframetablecode子集表格pd
2条回答

将新列"code"添加到每个数据帧并连接它们。显然,Z198, supS222, stk的行将丢失。解决方案是使用代码和模式值的乘积.reindex最终的数据帧。函数.reindex将自动向缺少的行添加NaN

idx = pd.MultiIndex.from_product(
    [set(stk["code"].tolist() + sup["code"].tolist()), ["stk", "sup"]],
    names=["code", "mode"],
)
x = (
    pd.concat([stk.assign(mode="stk"), sup.assign(mode="sup")])
    .set_index(["code", "mode"])
    .reindex(idx)
    .reset_index()
)
print(x)

印刷品:

   code mode  01-05-2021  02-05-2021  03-05-2021  06-05-2021
0  Z198  stk         6.0         2.0        12.0         NaN
1  Z198  sup         NaN         NaN         NaN         NaN
2  H812  stk         2.0         3.0        13.0         NaN
3  H812  sup         2.0         NaN         5.0         4.0
4  A121  stk         4.0         1.0        12.0         NaN
5  A121  sup         2.0         NaN         5.0         1.0
6  S222  stk         NaN         NaN         NaN         NaN
7  S222  sup         2.0         NaN         5.0         7.0

试试看:

sup['mode'] = 'sup'
stk['mode'] = 'stk'

# this function is just to add the misisng rows with NAN values. If you don't want rows with NAN values skip the func.
def add_row(x):
    if (len(x)<2):
        x = x.append([{'code':  x['code'].iloc[0], 'mode':  x['mode'].iloc[0]}])
        return x
    return x
merged_df = stk.merge(sup, how='outer').groupby('code').apply(add_row).reset_index(drop=True)

输出

   code mode  01-05-2021  02-05-2021  03-05-2021  06-05-2021
0  A121  stk         4.0         1.0        12.0         NaN
1  A121  sup         2.0         NaN         5.0         1.0
2  H812  stk         2.0         3.0        13.0         NaN
3  H812  sup         2.0         NaN         5.0         4.0
4  S222  sup         2.0         NaN         5.0         7.0
5  S222  sup         NaN         NaN         NaN         NaN
6  Z198  stk         6.0         2.0        12.0         NaN
7  Z198  stk         NaN         NaN         NaN         NaN

相关问题 更多 >