我正在努力正确合并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的条件下,它已经有了独特的时间,信息尽可能地折叠。
我仍然试图了解各种连接/合并/连接操作以及它们是如何工作的,但我喜欢一两个指针。
谢谢!
答案 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