对数据帧的每一行执行自定义函数,同时忽略第一行



我是python的新手,仍在努力了解python。我不知道该如何处理。我试图应用一个自定义函数来计算百分比,同时忽略第一列,因为它是一个字符串。并且还希望仅每行的最后3个数据点。

尝试使用pandas中的df.rolling函数,但未能成功实现。谢谢你事先的帮助。

import pandas as pd
import numpy as np 
# df = pd.read_csv('data/imp_vol.csv')
df=pd.DataFrame({"A":['a',3,None,4,2,4], 
"B":['b',2,4,3,2,5], 
"C":['c',3,8,5,4,None], 
"D":['d',2,None,4,2,None]}) 
df['heading'] = ['a','b','c','d','e','f']
new_order = [-1,0,1,2,3]
df = df[df.columns[new_order]]
df = df.replace(np.nan, 0)
df.update(df.iloc[:, -4:].mask(lambda x: x.isin([0, '0'])).ffill(axis=1))
def perc_func(r):
x = r
last_val = x[-1]
min_val = x.min()
max_val = x.max()
percentile = ((last_val - min_val) / (max_val - min_val) * 100)  
return percentile
df['Percentile'] = df.apply(lambda row:perc_func(row), axis=1)
print(df)

我想要的样本输出如下(数据仅为百分位数(:

heading    A    B    C    D  Percentile
0       a  1.0  3.0  2.0  4.0          45
1       b  3.0  2.0  3.0  2.0          44
2       c  0.0  4.0  8.0  8.0          32
3       d  4.0  3.0  5.0  4.0          48
4       e  2.0  2.0  4.0  2.0          59
5       f  4.0  5.0  5.0  5.0          59

您希望将自定义函数应用于df的所有行,除了第一行和第一列:

In [1157]: df['Percentile'] = df.iloc[1:, 1:].apply(perc_func, 1)                                                                                                                                           
In [1158]: df                                                                                                                                                                                               
Out[1158]: 
heading  A  B  C  D  Percentile
0       a  a  b  c  d         NaN
1       b  3  2  3  2         0.0
2       c  0  4  8  8       100.0
3       d  4  3  5  4        50.0
4       e  2  2  4  2         0.0
5       f  4  5  5  5       100.0

最新更新