在Python中连接两个不等的数据框的最优雅方法,并用0填充不存在的值

2024-09-24 02:23:42 发布

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

假设我有两个数据帧x_2016y_2017,分别有index01%date列。我对index%列感兴趣。我遇到的问题是,我需要它们是一个数据帧,其中索引是W11到W15,而不管列%中的值的年份如何,但是由于索引在周数方面没有完全重叠,因此我将有一些行需要用0填充。你知道吗

x_2016


    index       0       1           %           date
    2016 W12    16.0    0           2.5         2016-03-28
    2016 W13    38.0    5.0         43.0        2016-04-04
    2016 W14    48.0    13.0        63.0        2016-04-11
    2016 W15    50.0    18.0        1.0         2016-04-18

y_2017

   index         0      1           %           date
   2017 W11     16.0    8.0         40.0        2017-03-13
   2017 W12     20.0    16.0        19.0        2017-03-27
   2017 W13     34.0    27.0        6.0         2017-04-03
   2017 W14     28.0    32.0        17.0        2017-04-10

最终,数据帧应该如下所示:

最终

index     %_2016          %_2017
W11       0               40.0
W12       2.5             19.0
W13       43.0            6.0
W14       63.0            17.0       
W15       1.0             0

在python中,最优雅的方法是什么?你知道吗


Tags: 数据方法dateindex感兴趣年份周数w15
1条回答
网友
1楼 · 发布于 2024-09-24 02:23:42

您需要从每个数据帧中提取“Wxx”信息到一个新列,然后合并该列上的数据帧。最后,只选择感兴趣的列并按W值排序。你知道吗

x_2016['W_index'] = x_2016['index'].str.extract('(W\d\d)', expand=True)

y_2017['W_index'] = y_2017['index'].str.extract('(W\d\d)', expand=True)

pd.merge(
    left=x_2016, 
    right=y_2017, 
    how='outer', 
    on='W_index', 
    suffixes=('_2016', '_2017'))[
        ['W_index', '%_2016', '%_2017']
    ].fillna(0).sort_values('W_index').reset_index(drop=True)

# returns:
   W_index  %_2016  %_2017
0      W11     0.0    40.0
1      W12     2.5    19.0
2      W13    43.0     6.0
3      W14    63.0    17.0
4      W15     1.0     0.0

相关问题 更多 >