python - 如何根据先前索引处新创建的值执行计算?
问题描述
我有一个包含两列的数据集。一列是日期,第二列是多个指标。我想创建第三列(New_Col),查看当前倍数和先前创建的值并将它们相乘。所以第一个会
Date Multiple
01-01-2020 1
01-01-2020 1
01-01-2020 3
01-01-2020 1
01-01-2020 1
01-01-2020 1
01-01-2020 4
01-01-2020 1
功能:
def new_func(df):
输出
Date Multiple New_Col
01-01-2020 1 1
01-01-2020 1 1
01-01-2020 3 3
01-01-2020 1 3
01-01-2020 1 3
01-01-2020 1 3
01-01-2020 4 12
01-01-2020 1 12
解决方案
- 您正在尝试根据其先前的值创建列的值。
- 矢量化操作根据现有值计算值,然后一次更新所有列值,因此无法访问新创建的先前值。
- 为了根据前一个值执行计算,您必须在对当前值执行计算时访问前一个值
- 这可以通过将每个值分配给列表然后访问前一个索引处的值来完成
- 有关
pandas.DataFrame.iterrows
使用详情,请参阅。 - 以下实现在数据帧索引为
range(0, len(df)-1)
时有效,从 0 开始的唯一有序整数。- 因为
df
索引i
被用来解决new_col
- 因为
import pandas as pd
data = {'Date': ['01-01-2020', '01-01-2020', '01-01-2020', '01-01-2020', '01-01-2020', '01-01-2020', '01-01-2020', '01-01-2020'],
'Multiple': [1, 1, 3, 1, 1, 1, 4, 1]}
# create dataframe
df = pd.DataFrame(data)
# function to perform multiplication
def create_new_column(dataframe: pd.DataFrame) -> list:
new_col = list()
for i, (d, m) in df.iterrows(): # i is the current index location; based on the shape of the example dataframe
if i == 0:
new_col.append(m * 1)
else:
new_col.append(m * new_col[i-1]) # [i-1] previous index location
return new_col
# call function and create new_col
df['new_col'] = create_new_column(df)
# display(df)
Date Multiple new_col
0 01-01-2020 1 1
1 01-01-2020 1 1
2 01-01-2020 3 3
3 01-01-2020 1 3
4 01-01-2020 1 3
5 01-01-2020 1 3
6 01-01-2020 4 12
7 01-01-2020 1 12
推荐阅读
- pyqt - Pyqt5 两个 QThread 通信使用信号和槽问题
- java - 只有有限的 mqtt 客户端连接到 IBM MQ 代理
- javascript - Angular 6 modal,作为单独组件使用时增加了modal的宽度
- getorgchart - GetOrgChart 中的错误文本位置
- javascript - 在 Ionic 物理设备中获取用户的当前位置(iOS 版本)
- php - Route::delete 在 Laravel 中没有响应
- angular - 如何在ionic3中打印页面中的对象数据
- keras - 神经网络:为什么我不能更深入?
- ios - 核心数据迁移是否必要?
- python - 如何在 selenium python 中获取 Web 元素的正确位置