2017-06-08 30 views
-6

我对形式的一些数据列表:添加新的一列从所有行的值列表满足标准

 date   value 
'2017-01-01 01:01:01' 99 
'2017-01-02 01:01:01' 98 
'2017-01-03 01:01:01' 97 
.... 
'2017-01-30 01:01:01' 95 
'2017-01-31 01:01:01' 94 

我想增加一列,使得它像:

 date   value  list 
... 
... 
... 
'2017-01-30 01:01:01' 95 [99,98,97,95] 
'2017-01-31 01:01:01' 94 [99,98,97,95,94] 

当第三列是如果日期落在特定的时间范围内(如5天)之前的相应行中的时间在第二列中的值的列表。

+1

你得到downvoted因为你的问题完全是模糊的。 –

+0

只需点击问题文本编辑器右上方的(?)帮助图标即可。 –

回答

1

像这样的东西应该工作...

df = pd.DataFrame({'date': ['2017-01-01 01:01:01', '2017-01-02 01:01:01', '2017-01-03 01:01:01', '2017-01-30 01:01:01', '2017-01-31 01:01:01'], 
        'value': [99,98,97,95,94]}) 

df['date'] = pd.to_datetime(df['date']) 

def get_list(row): 

    subset = df[(row['date'] - df['date'] <= pd.to_timedelta('5 days')) & (row['date'] - df['date'] >= pd.to_timedelta('0 days'))] 
    return str(subset['value'].tolist()) 

df['list'] = df.apply(get_list, axis=1) 

输出:

   date value   list 
0 2017-01-01 01:01:01  99   [99] 
1 2017-01-02 01:01:01  98  [99, 98] 
2 2017-01-03 01:01:01  97 [99, 98, 97] 
3 2017-01-30 01:01:01  95   [95] 
4 2017-01-31 01:01:01  94  [95, 94] 
+0

谢谢莱利! for循环不会让代码变得缓慢,并且会打败大熊猫的目的? – NewCoder

+0

我编辑了代码,使它更干净并避免使用for循环 –

相关问题