合并pandas中的多个数据集

时间:2015-09-03 18:04:33

标签: python pandas

我正在努力正确合并pandas中的一些数据集。假设我在不同的时间测量了变量A,B和C.有时候,我同时有A和B,有时候没有。我有三个数据帧,其中数据帧的索引是测量时间,还有一个测量列。如果我连接这些数据帧,我得到一堆NaN,我没有测量,可能像

 idx |  A  |  B  |  C
-----|-----|-----|----
  0  |  1  | NaN | NaN
  0  | NaN |  2  |  3
  1  |  5  |  3  | NaN

在连接中,我有非唯一的时间索引。我想要的是按时间排序,并使用相同的时间索引折叠行。这里理想的结果是

 idx |  A  |  B  |  C
-----|-----|-----|----
  0  |  1  |  2  |  3
  1  |  5  |  3  | NaN

那将是第一个场景。为了使事情更复杂,我可能有一个列D,它指定了测量的位置。因此,只要D中的条目在那个时间不同,我就需要允许这种折叠保留非唯一索引。也许我们有

 idx |  A  |  B  |  C  |  D
-----|-----|-----|-----|-----
  0  |  1  | NaN | NaN | Paris
  0  | NaN |  2  |  3  |  NYC
  1  |  5  |  3  | NaN |  NYC
  1  | NaN | NaN |  0  | Paris

此数据框不能再进一步折叠,因为在D的条件下,它已经有了独特的时间,信息尽可能地折叠。

我仍然试图了解各种连接/合并/连接操作以及它们是如何工作的,但我喜欢一两个指针。

谢谢!

1 个答案:

答案 0 :(得分:0)

假设您的索引是时间戳,请尝试按所需频率resample(例如每小时,每天,每周等)。如果在窗口期间观察到多个样本,您可以进行平均测量。

df = pd.DataFrame({'A': {Timestamp('2015-01-01 11:30:00'): 1.0,
  Timestamp('2015-01-01 12:30:00'): nan,
  Timestamp('2015-01-02 11:15:00'): 5.0,
  Timestamp('2015-01-02 12:15:00'): nan},
 'B': {Timestamp('2015-01-01 11:30:00'): nan,
  Timestamp('2015-01-01 12:30:00'): 2.0,
  Timestamp('2015-01-02 11:15:00'): 3.0,
  Timestamp('2015-01-02 12:15:00'): nan},
 'C': {Timestamp('2015-01-01 11:30:00'): nan,
  Timestamp('2015-01-01 12:30:00'): 3.0,
  Timestamp('2015-01-02 11:15:00'): nan,
  Timestamp('2015-01-02 12:15:00'): 0.0},
 'D': {Timestamp('2015-01-01 11:30:00'): 'Paris',
  Timestamp('2015-01-01 12:30:00'): 'NYC',
  Timestamp('2015-01-02 11:15:00'): 'NYC',
  Timestamp('2015-01-02 12:15:00'): 'Paris'}})

>>> df
                      A   B   C      D
2015-01-01 11:30:00   1 NaN NaN  Paris
2015-01-01 12:30:00 NaN   2   3    NYC
2015-01-02 11:15:00   5   3 NaN    NYC
2015-01-02 12:15:00 NaN NaN   0  Paris

>>> df.resample('1D', how='mean')
            A  B  C
2015-01-01  1  2  3
2015-01-02  5  3  0

要考虑观察点,您需要将其包含为多索引列。一种简单的方法是对日期和位置进行分组(D列),然后进行取消堆叠。

>>> df.reset_index().groupby(['index', 'D']).mean().unstack().resample('1D', how='mean')
              A           B           C       
D           NYC  Paris  NYC  Paris  NYC  Paris
index                                         
2015-01-01  NaN      1    2    NaN    3    NaN
2015-01-02    5    NaN    3    NaN  NaN      0