如何在数据帧的所有行上应用函数

2024-09-28 03:22:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下的数据集

data = { "C1": [1.0 , 1.2 , 1.2,  1.30 , 1.29 , 1.30,  1.31] ,
         "C2" :[1.2 , 1.3 , 1.3 , 1.40 , 1.50 , 1.60 , 1.61] ,
         "C3": [1.3 , 1.0 , 1.2 , 1.21 , 1.31 , 1.42 , 1.33] }

data = pd.DataFrame(data)
data = data.T
print(data)


          0    1    2     3     4     5     6
Cell 1  1.0  1.2  1.2  1.30  1.29  1.30  1.31
Cell 2  1.2  1.3  1.3  1.40  1.50  1.60  1.61
Cell 3  1.3  1.0  1.2  1.21  1.31  1.42  1.33

我有一个函数,可以在数字列表中查找非递减序列。例如,如果考虑第一行是

[1.0 , 1.2 , 1.2,  1.30 , 1.29 , 1.30,  1.31]

有两个非递减序列:

1- [1.0 , 1.2 , 1.2,  1.30] and 2- [1.29 , 1.30,  1.31]

我使用以下函数获得这些非递减序列:

def igroups(x):
    s = [0] + [i for i in range(1, len(x)) if x[i] < x[i-1]]  + [len(x)]
    #print(s)
    return [x[j:k] for j, k in [s[i:i+2] for i in range(len(s)-1)] if k - j > 1]

我的问题:我想apply对我的数据帧的所有行igroups进行操作。我该怎么做? 例如,我尝试使用apply解决这个问题

dt.applymap(lambda x :  igroups(x))

我知道apply函数在单元格上工作,而不是在一行上,最后一行代码不工作的原因就是因为这个,我也知道我可以使用循环来解决这个问题(我不喜欢这样)

感兴趣的结果是有一个新的列(new),其中包含非递减的数字序列列表:

0       1    2    3    4     5     6     7     new
Cell 1  1.0  1.2  1.2  1.30  1.29  1.30  1.31  [[1.0 , 1.2 , 1.2,  1.30 ], [1.29 , 1.30,  1.31]]
Cell 2  1.2  1.3  1.3  1.40  1.50  1.60  1.61  [[1.2 , 1.3 , 1.3 , 1.40 , 1.50 , 1.60 , 1.61]]
Cell 3  1.3  1.0  1.2  1.21  1.31  1.42  1.33  [[1.0 , 1.2 , 1.21 , 1.31 , 1.42]]
            

Tags: 数据函数in列表fordatalenif
1条回答
网友
1楼 · 发布于 2024-09-28 03:22:06

使用轴为1的熊猫apply。它将函数应用于每一行并返回一个序列

df['new'] = df.apply(igroups, axis = 1)

相关问题 更多 >

    热门问题