3

使用 Python pandas,我如何创建一个函数来计算代表低于前一行的值的行的比例?所以换句话说,我需要一个函数来遍历 Pandas 数据框的特定系列列下的值,并且只计算下一行的值(在名为“里程”的列下)小于当前行的值的那些值. 就像说你有这个: 里程:第 1 行:30 第 2 行:20 第 3 行:40 第 4 行:50 第 5 行:60 第 6 行:55 第 7 行:75

如果计数器工作正常,它会发现第 2 行的值 20 小于第 1 行的值 30,因此它会将 +1 加到计数器(计数那个)。
在上面的示例中,它应该计算的另一行是第 6 行:55,它小于其前一行 5:60,因此计算该行。所以最终计数将是:2。然后我可以将最终计数除以总行数来得到一个比例。

预先感谢您的任何帮助!

4

2 回答 2

0

您可以像这样使用 pandas 函数shift()

import pandas as pd
data = {'mileage': [30,20,40,50,60,55,75] }
df = pd.DataFrame(data)
smaller_rows = (df.mileage < df.mileage.shift()).sum()
print(smaller_rows)
out[]: 2

它是如何工作的?Shift(),顾名思义,将里程列的值进一步移动 1 行(默认为 1,可以通过 key 指定任何数量periods)。然后将两个 DataFrame 相互比较,从而创建一个布尔数组。应用sum()将计算 True 的数量。

要获得比例,您需要smaller_rows除以总行数,如下所示:

proportion = smaller_rows/len(df) 
于 2020-06-18T19:52:54.443 回答
0

您可以使用以下series.shift功能执行此操作:

proportion = len(df[df['Mileage'] < df['Mileage'].shift(1)])/len(df)
print(proportion)

输出:

0.2857142857142857

代码的一部分:

df[df['Mileage'] < df['Mileage'].shift(1)]

使用掩码仅选择满足该条件的行(在本例中为 2),因此我们将dflen除以总len和得到比例。 .shift(1)允许您访问下一行的值,以便您可以通过这种方式与当前行进行比较。

于 2020-06-18T19:54:04.443 回答