首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将time serie的先前条目写入其他列

将time serie的先前条目写入其他列
EN

Stack Overflow用户
提问于 2020-01-01 18:05:54
回答 1查看 38关注 0票数 1

我有一个dataframe,它包含单个天的值:

代码语言:javascript
复制
  day  value
    1   10.1
    2   15.4
    3   12.1
    4   14.1
    5   -9.7
    6    2.0
    8    3.4

没有必要为每一天提供一个值(在我的示例中缺少第7天),但是每天没有超过一个值。

我想在这个数据中添加更多的列,包括每一行前一天的值、两天前的值、三天前的值等等。结果是:

代码语言:javascript
复制
  day  value  value-of-1  value-of-2  value-of-3
    1   10.1         NaN         NaN         NaN
    2   15.4        10.1         NaN         NaN
    3   12.1        15.4        10.1         NaN
    4   14.1        12.1        15.4        10.1
    5   -9.7        14.1        12.1        15.4
    6    2.0        -9.7        14.1        12.1
    8    3.4         NaN         2.0        -9.7

目前,我在原有的dataframe中添加了一个包含所需日期的列,然后使用这个新列作为联接条件合并原始数据。在对专栏进行了一些重组之后,我得到了我的结果:

代码语言:javascript
复制
data = [[1, 10.1], [2, 15.4], [3, 12.1], [4, 14.1], [5, -9.7], [6, 2.0], [8, 3.4]]
df = pd.DataFrame(data, columns = ['day', 'value']) 

def add_column_for_prev_day(df, day):
    df[f"day-{day}"] = df["day"] - day
    df = df.merge(df[["day", "value"]], how="left", left_on=f"day-{day}", right_on="day", suffixes=("", "_r")) \
        .drop(["day_r",f"day-{day}"],axis=1) \
        .rename({"value_r": f"value-of-{day}"}, axis=1)
    return df

df = add_column_for_prev_day(df, 1)
df = add_column_for_prev_day(df, 2)
df = add_column_for_prev_day(df, 3)

我想知道是否有一种更好、更快的方法来获得同样的结果,特别是不需要一次又一次地合并数据。

一个简单的转变没有帮助,因为有几天没有数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-01 18:15:11

您可以使用:

代码语言:javascript
复制
m=df.set_index('day').reindex(range(df['day'].min(),df['day'].max()+1))
l=[1,2,3]
for i in l:
    m[f"value_of_{i}"] = m['value'].shift(i)
m.reindex(df.day).reset_index()

代码语言:javascript
复制
   day  value  value_of_1  value_of_2  value_of_3
0    1   10.1         NaN         NaN         NaN
1    2   15.4        10.1         NaN         NaN
2    3   12.1        15.4        10.1         NaN
3    4   14.1        12.1        15.4        10.1
4    5   -9.7        14.1        12.1        15.4
5    6    2.0        -9.7        14.1        12.1
6    8    3.4         NaN         2.0        -9.7
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59554874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档