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

我对 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  OtherData2

0  1603822620000    101           1           7

1  1603822680000    105           2           6

2  1603822740000    102           3           5

3  1603823040000    108           4           4

4  1603823100000    105           5           3

5  1603823160000    101           6           2

6  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 Fut2Min

0  1603822620000    101           1           8     102

1  1603822680000    105           2           7     108

2  1603822740000    102           3           6     NaN

3  1603822800000    108           4           5     NaN

4  1603823040000    105           5           4     106

5  1603823100000    101           6           3     111

6  1603823160000    106           7           2     NaN

7  1603823220000    111           8           1     NaN


BIG阳
浏览 133回答 1
1回答

烙印99

假设数据框是:       TimeStamp  Price  OtherData1  OtherData2  Fut2Min0  1603822620000    101           1           8        01  1603822680000    105           2           7        02  1603822740000    102           3           6        03  1603822800000    108           4           5        04  1603823040000    105           5           4        05  1603823100000    101           6           3        06  1603823160000    106           7           2        07  1603823220000    111           8           1        0然后,如果您使用pandas.DataFrame.apply,则沿列轴:import pandas as pddef Fut2MinFunc(row):    futTimeStamp = row.TimeStamp + 120000    if (futTimeStamp in df.TimeStamp.values):        return df.loc[df['TimeStamp'] == futTimeStamp, 'Price'].iloc[0]    else:        return Nonedf['Fut2Min'] = df.apply(Fut2MinFunc, axis = 1)您将得到您所描述的内容:       TimeStamp  Price  OtherData1  OtherData2  Fut2Min0  1603822620000    101           1           8    102.01  1603822680000    105           2           7    108.02  1603822740000    102           3           6      NaN3  1603822800000    108           4           5      NaN4  1603823040000    105           5           4    106.05  1603823100000    101           6           3    111.06  1603823160000    106           7           2      NaN7  1603823220000    111           8           1      NaN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python