假设我有以下数据框:

import pandas as pd
mydict = {
    'date_time':['2019-01-01','2019-01-02','2019-01-03','2019-01-04'],
    'value':[5,3,7,2]
}

df = pd.DataFrame(mydict)


我想创建以下输出:

    date_time  value    Number of previous rows with larger value
0  2019-01-01      5                0
1  2019-01-02      3                1
2  2019-01-03      7                0
3  2019-01-04      2                3


后一列的逻辑是,它检查前一列的所有值,并计算大于当前行中值的数量。

因此,在值为0的第一行中,不存在先前的行,因此该数字为0。

在第二行中,值为3,而上一行具有较大的值(5),表示“数字”为

在第3行中,该值为7,第1行或第2行均不较大,因此该数字为0。

在值为2的第4行中,第1,2,3行较大,表示数字为3。

最有效的方法是什么?

最佳答案

我们不能为您提供最有效的解决方案,但可以

import pandas as pd
mydict = {
    'date_time':['2019-01-01','2019-01-02','2019-01-03','2019-01-04','2019-01-04', '2019-01-04'],
    'value':[5,3,7,2,4,7]
}

df = pd.DataFrame(mydict)


df.loc[0:0,'count'] = 0

for i in range(df.shape[0]):
    df.loc[i:i,'count'] = df[:i+1][df['value'].loc[:i] > df['value'].loc[i]].shape[0]

df['count'] = df['count'].astype("int32")

关于python - Pandas :获取具有较大值的系列中的前几行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59188681/

10-12 16:59