小编典典

Pandas列表理解

python

我正在举一个玩具示例,但它将帮助我了解我正在尝试做的其他事情的情况。假设我要在数据框“ optimal_fruit”中添加一个新列,该列是苹果*橙-香蕉。

我可以做这样的事情来得到它。

df2['optimal_fruit'] = df2['apples'] * df2['oranges'] - df2['bananas']


apples  oranges bananas optimal_fruit
1       6       11      -5
2       7       12      2
3       8       13      11
4       9       14      22
5       10      15      35

如果我尝试做这样的事情怎么办?我该如何在列表理解中做到这一点?

df2['optimal_fruit'] = [x * y - z for x in df2['apples'] for y in df2['oranges'] for z in df2['bananas']]

我收到以下错误:

ValueError:值的长度与索引的长度不匹配

与往常一样,非常感谢您的帮助!


阅读 223

收藏
2021-01-16

共1个答案

小编典典

本质上,列表理解语句是一组3个嵌套循环。在代码中:

l = []
for x in df2['apples']:
    for y in df2['oranges']:
        for z in df2['bananas']:
            l.extend([x * y - z])

结果列表的长度将是DataFrame长度的3倍。因此,错误。要修复,您需要执行以下操作:

for x, y, z in zip(df2['apples'], df2['oranges'], df2['bananas']):
    l.extend([x * y - z])

在列表理解方面:

[x * y - z for x, y, z in zip(df2['apples'], df2['oranges'], df2['bananas'])]
2021-01-16