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

Posted

技术标签:

【中文标题】如何在 Pandas Dataframe 中应用列表理解?【英文标题】:How to apply a list comprehension in Panda Dataframe? 【发布时间】:2020-09-18 22:44:03 【问题描述】:

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 在 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]]]

谢谢。

【问题讨论】:

请为输入设置一个小样本数据框,为所需输出设置一个。 如果您在设置示例数据帧时遇到问题,可以查看this reference post。 谢谢。添加了示例数据框 该示例数据框有点太大而无法使用。您能否将其限制为具有确定性(非随机生成)值的六行,好吗?另外,请发布您想要的该示例的结果。谢谢。 顺便说一句,我需要在这里看到所需的结果,因为不清楚您希望新列如何适应原始数据框。因为您的代码可以生成比原始列短的列表。 【参考方案1】:

您可以使用 pandas 应用函数,并将您的列表推导式放入其中。

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'] 中所述的输出

【讨论】:

以上是关于如何在 Pandas Dataframe 中应用列表理解?的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一列中写入两个不同变量值的excel/pandas Dataframe

pandas中如何对指定列做fillna

Python/Pandas:如何将字符串列表与 DataFrame 列匹配

如何从列类型列表中删除 pandas DataFrame 中的空值

使用 pandas DataFrame.explode() 后如何创建新的“索引”列?

如何从 pandas DataFrame 中“取消透视”特定列?