在 pandas 数据框中应用函数
Apply function in a pandas dataframe
我已经弄清楚如何将函数应用于 pandas 数据帧的整个列或子部分,而不是编写一个逐个修改每个单元格的循环。
是否可以编写一个函数,在执行上述操作时将数据框中的单元格作为输入?
例如。一个函数,在当前单元格中 returns 前一个单元格的值乘以前一个单元格之前的单元格的乘积。我现在在一个循环中逐行执行此操作,不出所料,它的效率非常低。我是 python.
的新手
对于您提到的情况(将前两个单元格相乘),您可以执行以下操作(循环遍历每一列,但不是每个单元格):
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
这样就可以了,shift 可以根据您的需要前进和后退:
df['Column'] = df['Column'].shift(1) * df['Column'].shift(2)
我已经弄清楚如何将函数应用于 pandas 数据帧的整个列或子部分,而不是编写一个逐个修改每个单元格的循环。
是否可以编写一个函数,在执行上述操作时将数据框中的单元格作为输入?
例如。一个函数,在当前单元格中 returns 前一个单元格的值乘以前一个单元格之前的单元格的乘积。我现在在一个循环中逐行执行此操作,不出所料,它的效率非常低。我是 python.
的新手对于您提到的情况(将前两个单元格相乘),您可以执行以下操作(循环遍历每一列,但不是每个单元格):
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
这样就可以了,shift 可以根据您的需要前进和后退:
df['Column'] = df['Column'].shift(1) * df['Column'].shift(2)