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

den*_*npy 3 list-comprehension list pandas

list值中,我尝试识别总和超过 10 的任何连续值对

a = [1,9,3,4,5]
Run Code Online (Sandbox Code Playgroud)

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

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

...我将其重写为列表理解...

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

两者都产生相同的输出:

values = [[1,9], [9,3]]
Run Code Online (Sandbox Code Playgroud)

我的问题是如何最好地在 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()
Run Code Online (Sandbox Code Playgroud)

其中: - a 位于 a 内,adf['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]]
Run Code Online (Sandbox Code Playgroud)
  • 并且,列表理解的结果将存储在新列中 df['X1]

期望的输出是:

df['X1'] = [[[1,9], [9,3]],[[8,3]],[[NaN]],[[2,10],[10,4]],[[NaN]]]
Run Code Online (Sandbox Code Playgroud)

谢谢你。

mon*_*nte 6

您可以使用 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.
Run Code Online (Sandbox Code Playgroud)

这将给出 df['X1'] 中所述的输出