几个数据帧应具有相同的索引值。怎么比较?

时间:2017-11-29 22:25:28

标签: pandas numpy dataframe scipy scikits

我有几个数据帧。所有都是时间序列索引。 问题是,有些人缺少数据,我需要检查哪些数据库有不同的日期索引。 现在所有值都包含相同的值,只有一个或两个具有附加值或缺少一些值的情况,在这种情况下,我需要调用另一个数据提供程序来获取这些值其余的数据帧因此算法不会中断。

INDEX    VAL

DF1
01-01-17 6.00
03-01-17 4.53
05-01-17 8.91

DF2
01-01-17 4.11
03-01-17 8.67
07-01-17 1.93
09-01-17 3.11

DF3
01-01-17 4.00
03-01-17 20.10
07-01-17 3.12

DF4
01-01-17 8.11
03-01-17 1.89
06-01-17 3.89
07-01-17 4.89

有数以百计的价值观,而且很难手工完成。

我想我正在寻找的是一种比较它们的方法,或者创建一种矩阵,向我展示我需要为每个df获得的值。

2 个答案:

答案 0 :(得分:1)

让我们试一试 列表理解

  • list comprehension
  • date = pd.Timestamp('20160101') df = pd.date_range('20160301', '20160831', freq='7D').to_series().reset_index() df[0] = [pd.Timedelta('nat')]*25+[pd.Timedelta(days=99), pd.Timedelta(days=45)] df.columns = ['outofservicedatetime', 'days_diff'] df Out[258]: outofservicedatetime days_diff 0 2016-03-01 NaT 1 2016-03-08 NaT 2 2016-03-15 NaT 3 2016-03-22 NaT 4 2016-03-29 NaT 5 2016-04-05 NaT 6 2016-04-12 NaT 7 2016-04-19 NaT 8 2016-04-26 NaT 9 2016-05-03 NaT 10 2016-05-10 NaT 11 2016-05-17 NaT 12 2016-05-24 NaT 13 2016-05-31 NaT 14 2016-06-07 NaT 15 2016-06-14 NaT 16 2016-06-21 NaT 17 2016-06-28 NaT 18 2016-07-05 NaT 19 2016-07-12 NaT 20 2016-07-19 NaT 21 2016-07-26 NaT 22 2016-08-02 NaT 23 2016-08-09 NaT 24 2016-08-16 NaT 25 2016-08-23 99 days 26 2016-08-30 45 days %timeit df['days_diff'].fillna(df['outofservicedatetime']-date) 1.29 ms ± 41.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) df['days_diff'].fillna(df['outofservicedatetime']-date) Out[260]: 0 60 days 1 67 days 2 74 days 3 81 days 4 88 days 5 95 days 6 102 days 7 109 days 8 116 days 9 123 days 10 130 days 11 137 days 12 144 days 13 151 days 14 158 days 15 165 days 16 172 days 17 179 days 18 186 days 19 193 days 20 200 days 21 207 days 22 214 days 23 221 days 24 228 days 25 99 days 26 45 days Name: days_diff, dtype: timedelta64[ns] %timeit df.loc[df['days_diff'].isnull(), 'days_diff'] = df['outofservicedatetime'] - date 2.46 ms ± 106 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
  • pd.concat
  • reindex
  • 精彩集锦的数据框样式

eval

enter image description here

答案 1 :(得分:0)

两种可能性:

1)看dataframe.resample。这将确保您在每个数据框中具有相同的索引值;任何缺失的行都将设置为nan。

2)使用dataframe.join来组合数据帧。使用how关键字可以指定合并的类型。在你的情况下,'外部'如果您没有"主索引"可能是正确的选择。有一个很好的description of merge, join, and concatenate可用。