首页 > 解决方案 > 如何使用从当前行和上一行访问数据的函数将新列添加到数据框中?

问题描述

我有一个包含几天数据的数据框:代码

import pandas

[...]

daily_data_f = pandas.DataFrame(daily_data, columns = ['Day', 'Total TODO/TODOE count'])

print(daily_data_f)

生成以下输出:

          Day  Total TODO/TODOE count
0  2020-05-16                      35
1  2020-05-17                      35
2  2020-05-18                      35
3  2020-05-19                      35
4  2020-05-20                      35
..        ...                     ...
64 2020-07-18                      35
65 2020-07-19                      35
66 2020-07-20                      35
68 2020-07-21                     151

我想计算Total TODO/TODOE count随后两天的值之间的差异。该值从 2020 年 6 月 28 日的 35 跃升至 2020 年 7 月 21 日的 151。我要为 2020-07-21 计算的值151-35=116

这个答案建议了这种方法:

df['new_column_name'] = df.apply(lambda x: my_function(x['value_1'], x['value_2']), axis=1)

我将不得不写这样的东西:

daily_data_f['First Derivative'] = daily_data_f.apply(lambda x:diff(daily_data_f['Total TODO/TODOE count'], <PREVIOUS_VALUE>), axis=1)

其中<PREVIOUS_VALUE>'Total TODO/TODOE count'上一行(天)的值。

问题:如何为<PREVIOUS_VALUE>'Total TODO/TODOE count'上一行的值)编写表达式?

标签: pythonpython-3.xpandaspython-3.7

解决方案


您可以使用numpy.diffpandas.DataFrame.diff如下所示,numpy 方法应该稍微快一些:

麻木:

import numpy as np
df['diff'] = np.diff(df['Total TODO/TODOE count'], prepend=np.nan)

熊猫:

import pandas as pd
df['diff'] = df['Total TODO/TODOE count'].diff()

输出:

Day Total TODO/TODOE count  diff
0   2020-05-16  35  NaN
1   2020-05-17  35  0.0
2   2020-05-18  35  0.0
3   2020-05-19  35  0.0
4   2020-05-20  35  0.0
64  2020-07-18  35  0.0
65  2020-07-19  35  0.0
66  2020-07-20  35  0.0
68  2020-07-21  151 116.0

推荐阅读