【问题标题】:Format dataframe to equal length time-series format将数据帧格式化为等长时间序列格式
【发布时间】:2020-11-06 02:33:26
【问题描述】:

我有一个数据框

time.   item.   value1.   value2
-----------------------------------
1       1       3           4
2       1       2           5
1       2       3           5
3       2       2           1
2       3       3           6
3       3       2           5

我想将其转换为以下内容

time.   item.   value1.   value2
-----------------------------------
1       1       3           4
2       1       2           5
3       1       nan         nan
1       2       3           5
2       2       nan         nan
3       2       2           1
1       3       nan         nan
2       3       3           6
3       3       2           5

所有项目的时间范围相同,如果不在原始数据帧中,value1 和 value2 是 nans。我用外部连接做了一些试验,但没有成功。

有什么简单的方法吗?

【问题讨论】:

  • 您提供的输出与要求不符,例如(item=2, time=2) 不存在于原始数据帧中,因此输出中应为NaN
  • @Ch3ster 取消删除您的解决方案,我认为它是正确的。
  • @Ch3ster 有一个解决方案。 (df.set_index(['time.', 'item.']).reindex(pd.MultiIndex.from_product([df['time.'].unique(), df['item.'].unique()], names=['time.', 'item.'])).reset_index()))
  • @ShubhamSharma 我没有收到您标记我的通知,我没有看到该问题已被编辑。取消删除。
  • @ScottBoston 我没有收到您标记我的通知。感谢您抽出时间并将其发布在 cmets 中。现在取消删除。

标签: python pandas outer-join


【解决方案1】:

您可以将timeitem 设置为索引,然后将df.reindexpd.MultiIndex.from_product 一起使用

time = df['time'].unique()
item = df['item'].unique()
idx = pd.MultiIndex.from_product([item, time],names=['item', 'time']).swaplevel(0,1)
df.set_index(['time', 'item']).reindex(idx).reset_index()

   time  item  value1  value2
0     1     1     3.0     4.0
1     2     1     2.0     5.0
2     3     1     NaN     NaN
3     1     2     3.0     5.0
4     2     2     NaN     NaN
5     3     2     2.0     1.0
6     1     3     NaN     NaN
7     2     3     3.0     6.0
8     3     3     2.0     5.0

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 2021-11-20
    • 2022-07-28
    • 2016-07-12
    • 2020-01-15
    • 2021-05-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多