大熊猫列表理解

Whi*_*hia 3 python list-comprehension pandas

我正在给一个玩具示例,但它会帮助我理解我正在尝试做的其他事情.假设我想要一个数据框'optimal_fruit'中的新列,即apple*orange - bananas.

我可以做这样的事情来获得它.

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
Run Code Online (Sandbox Code Playgroud)

如果我尝试做这样的事情会发生什么?我怎么能在列表理解中做到这一点?

df2['optimal_fruit'] = [x * y - z for x in df2['apples'] for y in df2['oranges'] for z in df2['bananas']]
Run Code Online (Sandbox Code Playgroud)

我得到一个错误:

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

一如既往,非常感谢你的帮助!

Kar*_*tik 10

基本上你的列表理解语句是一组3个嵌套循环.在代码中:

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

结果列表的长度将是DataFrame长度的3倍.因此错误.要修复,您需要相当于:

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

在列表理解方面:

[x * y - z for x, y, z in zip(df2['apples'], df2['oranges'], df2['bananas'])]
Run Code Online (Sandbox Code Playgroud)