我是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