我已经弄清楚如何将函数应用于pandas数据帧的整个列或子部分,而不是编写一个逐个修改每个单元格的循环。
在执行上述操作时,是否可以编写一个将数据帧中的单元格作为输入的函数?
EG。当前单元格中返回前一个单元格值乘以该前一个单元格之前的单元格的乘积的函数。我现在在循环中逐行执行此操作并且毫无疑问效率非常低。我对python很新。
答案 0 :(得分:0)
对于您提到的情况(乘以前两个单元格),您可以执行以下操作(循环遍历每列,但不是每个单元格):
import pandas as pd
a = pd.DataFrame({0:[1,2,3,4,5],1:[2,3,4,5,6],2:0,3:0})
for i in range(2,len(a)):
a[i] = a[i-1]*a[i-2]
这将使a
中前两列的每列相乘
如果要执行此操作向下行而不是列,您只需transpose
数据帧(然后在执行循环后再次转置它以原始格式恢复)
实际需要的是前两行中的元素和两列的当前行的乘积。这可以使用shift来完成:
import pandas as pd
df= pd.DataFrame({"A": [1,2,3,4], "B": [1,2,3,4], "C": [2,3,4,5], "D": [5,5,5,5]})
df['E'] = df['A'].shift(1)*df['B'].shift(1)*df['C']*df['D']
df['E']
产地:
0 NaN
1 15.0
2 80.0
3 225.0
答案 1 :(得分:0)
这样可以解决问题,根据您的需要,可以向前和向后移动:
df['Column'] = df['Column'].shift(1) * df['Column'].shift(2)