为了账号安全,请及时绑定邮箱和手机立即绑定

创建新的 Pandas DataFrame 列,使其等于同一 DataFrame 中其他行的值

创建新的 Pandas DataFrame 列,使其等于同一 DataFrame 中其他行的值

BIG阳 2024-01-24 16:15:06
我对 python 很陌生,对 Pandas 也很陌生。我查阅了 Pandas 文档并尝试了多种方法来解决这个问题,但没有成功。我有一个 DateFrame,其中一列包含时间戳,另一列包含价格,例如:d = {'TimeStamp': [1603822620000, 1603822680000,1603822740000, 1603823040000,1603823100000,1603823160000,1603823220000], 'Price': [101,105,102,108,105,101,106], 'OtherData1': [1,2,3,4,5,6,7], 'OtherData2': [7,6,5,4,3,2,1]}df= pd.DataFrame(d)df       TimeStamp  Price  OtherData1  OtherData20  1603822620000    101           1           71  1603822680000    105           2           62  1603822740000    102           3           53  1603823040000    108           4           44  1603823100000    105           5           35  1603823160000    101           6           26  1603823220000    106           7           1除了感兴趣的两列之外,此 DataFrame 还具有其他列,其中的数据与问题不是特别相关(用 OtherData Cols 表示)。我想创建一个新专栏“Fut2Min”(未来两分钟的价格)。可能会有数据缺失,所以这个问题不能通过简单地获取下面2行的数据来解决。我正在尝试找到一种方法,使每行中的 Fut2Min Col 的值 == 时间戳所在行的价格 + 120000(未来 2 分钟)或 null(或 NAN 或 w/e)(如果相应)时间戳不存在。对于示例数据,DF 应更新为:(用于模拟所需结果的代码)d = {'TimeStamp': [1603822620000, 1603822680000, 1603822740000, 1603822800000, 1603823040000,1603823100000,1603823160000,1603823220000],      'Price': [101,105,102,108,105,101,106,111],      'OtherData1': [1,2,3,4,5,6,7,8],      'OtherData2': [8,7,6,5,4,3,2,1],    'Fut2Min':[102,108,'NaN','NaN',106,111,'NaN','NaN']}df= pd.DataFrame(d)df       TimeStamp  Price  OtherData1  OtherData2 Fut2Min0  1603822620000    101           1           8     1021  1603822680000    105           2           7     1082  1603822740000    102           3           6     NaN3  1603822800000    108           4           5     NaN4  1603823040000    105           5           4     1065  1603823100000    101           6           3     1116  1603823160000    106           7           2     NaN7  1603823220000    111           8           1     NaN
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

假设数据框是:


       TimeStamp  Price  OtherData1  OtherData2  Fut2Min

0  1603822620000    101           1           8        0

1  1603822680000    105           2           7        0

2  1603822740000    102           3           6        0

3  1603822800000    108           4           5        0

4  1603823040000    105           5           4        0

5  1603823100000    101           6           3        0

6  1603823160000    106           7           2        0

7  1603823220000    111           8           1        0

然后,如果您使用pandas.DataFrame.apply,则沿列轴:


import pandas as pd


def Fut2MinFunc(row):

    futTimeStamp = row.TimeStamp + 120000

    if (futTimeStamp in df.TimeStamp.values):

        return df.loc[df['TimeStamp'] == futTimeStamp, 'Price'].iloc[0]

    else:

        return None


df['Fut2Min'] = df.apply(Fut2MinFunc, axis = 1)

您将得到您所描述的内容:


       TimeStamp  Price  OtherData1  OtherData2  Fut2Min

0  1603822620000    101           1           8    102.0

1  1603822680000    105           2           7    108.0

2  1603822740000    102           3           6      NaN

3  1603822800000    108           4           5      NaN

4  1603823040000    105           5           4    106.0

5  1603823100000    101           6           3    111.0

6  1603823160000    106           7           2      NaN

7  1603823220000    111           8           1      NaN


查看完整回答
反对 回复 2024-01-24
  • 1 回答
  • 0 关注
  • 32 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信