根据日期合并 (numpy) 数组

3 投票
1 回答
1252 浏览
提问于 2025-04-18 11:43

我有N个数组,它们的结构如下所示

Array 1: [['2014-01-01', '2014-01-03' ...], [1.1, 0.5, ...]]
Array 2: [['2014-01-01', '2014-01-02' ...], [1.4, 0.9, ...]]
Array 3: [['2014-01-02', '2014-01-04' ...], [0.8, 1.5, ...]]

我想把这些数组合并成一个数据框,像这样

date            1-data    2-data
2014-01-01      1.1       1.4
2014-01-02      0         0.9
2014-01-03      0.5       0
2014-01-04      0         0

问题是,正如你从例子中看到的,有些日期在每个数组中是缺失的(也就是说,所有数组中的日期并不相同)。我在寻找一种快速且符合Python风格的方法来把所有数组合并成一个数据框,并用零来填补缺失的数据。

1 个回答

2

这个方法应该能解决问题,使用的是 merge 函数和 outer 方法。

>>> import pandas as pd
>>> import numpy as np
>>> d1 = pd.DataFrame(np.array([['2014-01-01', '2014-01-03'], [1.1, 0.5]])).T
>>> d2 = pd.DataFrame(np.array([['2014-01-01', '2014-01-02'], [1.4, 0.9]])).T
>>> d3 = pd.DataFrame(np.array([['2014-01-02', '2014-01-04'], [0.8, 1.5]])).T
>>> d1.columns = d2.columns = d3.columns = ['t','v']
>>> pd.DataFrame(np.array(d1.merge(d2, on='t', how='outer').
...                          merge(d3, on='t', how='outer').
...                          sort('t')),
...                          columns=['date','1-data','2-data','3-data'])
... 
         date 1-data 2-data 3-data
0  2014-01-01    1.1    1.4    NaN
1  2014-01-02    NaN    0.9    0.8
2  2014-01-03    0.5    NaN    NaN
3  2014-01-04    NaN    NaN    1.5

[4 rows x 4 columns]

撰写回答