How to apply a list comprehension in Panda Dataframe?

泪湿孤枕 提交于 2021-01-29 02:21:30

问题


From a list of values, I try to identify any sequential pair of values whose sum exceeds 10

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

...so I wrote a for loop...

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

...which I rewritten as a list comprehension...

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

Both produce same output:

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

My question is how best may I apply the above list comprehension in a DataFrame.

Here is the sample 5 rows 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()

where: - a is within a df['X'] which is a list of values Columns 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]]
  • and, result of the list comprehension is to be store in new column df['X1]

Desired output is:

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

Thank you.


回答1:


You could use pandas apply function, and put your list comprehension in it.

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.

This will give the output as stated in df['X1']



来源:https://stackoverflow.com/questions/62118556/how-to-apply-a-list-comprehension-in-panda-dataframe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!