首页 > 解决方案 > Python - 当另一列中的数字大于之前的数字时,将列中的 x 值保存到列表

问题描述

(我是新手,所以我可能不知道提出这个问题的最佳方法,但这里是)

顺便说一句,我正在使用熊猫

当另一列中的数字大于之前的数字时,我正在寻找一种构造,每次将 x 值(假设 x=3 三个值)从一列保存到列表中。不应考虑第一个数字。需要注意的是,数字列 (NaN) 中也缺少数据。

NumberColumn   Value
23             4
23             5
NaN            8
24             6    # <--
24             23   # <--
24             26   # <--
24             11
25             2    # <--
25             1    # <--
25             3    # <--
25             5
Nan            9
26             4    # <--
26             6    # <--
NaN            9    # <--
26             12

希望最终新列表包含:

List1 = [6,23,26,2,1,3,4,6,9]

但它们也可能重叠,所以:

NumberColumn       Value
    27             4
    28             5    # <--
    NaN            8    # <--
    29             6    # <--   <-- overlap!
    29             23         # <--
    29             26         # <--

希望这里的列表将包含:

List1 = [5, 8, 6, 6, 23, 26]

谢谢你的协助 !

标签: pythonpandaslistdataframeoverlap

解决方案


假设数字不能小于 0:

list1 = []
x=3

df.fillna(value=0, inplace=True)
for i in range(1, len(df)):
    if df.loc[i, 'NumberColumn']>df.loc[i-1, 'NumberColumn']:
        list1 = list1 + df.loc[i:i+x-1, 'Value'].values.tolist()
print(list1)

作为一个函数:

def createList(df, x):
    list1 = []
    df.fillna(value=0, inplace=True)
    for i in range(1, len(df)):
        if df.loc[i, 'NumberColumn']>df.loc[i-1, 'NumberColumn']:
            list1 = list1 + df.loc[i:i+x-1, 'Value'].values.tolist()
    return list1

list1 = createList(df, x=3)
print(list1)

推荐阅读