如何在Panda Dataframe中应用列表理解?

问题描述 投票:1回答:1

list 的值,我试着找出任何一个连续的值对,其总和超过 10

a = [1,9,3,4,5]

...所以我写了一个 for 循环...

values = []
for i in range(len(a)-2):
    if sum(a[i:i+2]) >10:
        values += [a[i:i+2]]

...我把它改写成一个列表理解... ...。

values = [a[i:i+2] for i in range(len(a)-2) if sum(a[i:i+2]) >10]

两者产生相同的输出。

values = [[1,9], [9,3]]

我的问题是,我如何在DataFrame中最好地应用上述列表理解。

以下是5行DataFrame的示例

import pandas as pd
df = pd.DataFrame({'A': [1,1,1,1,0], 
                   'B': [9,8,3,2,2],
                   'C': [3,3,3,10,3],
                   'E': [4,4,4,4,4],
                   'F': [5,5,5,5,5]})
df['X'] = df.values.tolist()

其中: - a在a之内。df['X'] 这是一个数值列表,A列-F列。

df['X'] = [[1,9,3,4,5],[1,8,3,4,5],[1,3,3,4,5],[1,2,10,4,5],[0,2,3,4,5]]
  • 并且,列表理解的结果将被存储在新的列中。df['X1]

希望的输出是。

df['X1'] = [[[1,9], [9,3]],[[8,3]],[[NaN]],[[2,10],[10,4]],[[NaN]]]

谢谢你

pandas list list-comprehension
1个回答
1
投票

你可以使用pandas的apply函数,并把你的列表理解放在里面。

df = pd.DataFrame({'A': [1,1,1,1,0], 
                   'B': [9,8,3,2,2],
                   'C': [3,3,3,10,3],
                   'E': [4,4,4,4,4],
                   'F': [5,5,5,5,5]})

df['x'] = df.apply(lambda a: [a[i:i+2] for i in range(len(a)-2) if sum(a[i:i+2]) >= 10], axis=1)

#Note the axis parameters tells if you want to apply this function by rows or by columns, axis = 1 applies the function to each row.

这样就会得到df['X1']中所述的输出。

© www.soinside.com 2019 - 2024. All rights reserved.