使用lambda(pd.DataFrame)的元素操作

2024-09-28 21:39:31 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使用lambda从DatraFrame中减去常量数组

这是我的数据帧d

import pandas as pd

d = pd.DataFrame()
d['x'] = pd.Series([1, 2, 3, 4, 5, 6])
d['y'] = pd.Series([11, 22, 33, 44, 55, 66])

按预期工作的经典循环方法:

transformed = pd.DataFrame(columns=('x', 'y'))
for index, row in d.iterrows():
  transformed.loc[index] = [row[0] + 5, row[1] + 10]
print(transformed)

产生:

    x   y
0   6  21
1   7  32
2   8  43
3   9  54
4  10  65
5  11  76

这是lambda版本:

print(d.apply(lambda x: x + [5, 10]))

但是,正在引发错误:ValueError: operands could not be broadcast together with shapes (6,) (2,)

在阅读了Pandas documentation之后,我明白我的lambda方法应该有效。为什么不起作用


Tags: 数据方法lambdaimportdataframepandasindex数组
2条回答

如果列数与列表长度相同,则最简单的是:

print(d + [5, 10])
    x   y
0   6  21
1   7  32
2   8  43
3   9  54
4  10  65
5  11  76

如果有多列“按列表选择”,则列表的长度必须相同:

print(d[['x','y']] + [5, 10])

apply自动按列显示,默认情况下axis参数设置为0

您需要指定axis=1,因为它将按行计算:

>>> d.apply(lambda x: x + [5, 10], axis=1)
    x   y
0   6  21
1   7  32
2   8  43
3   9  54
4  10  65
5  11  76
>>> 

但在这种情况下,您不需要apply

>>> d + [5, 10]
    x   y
0   6  21
1   7  32
2   8  43
3   9  54
4  10  65
5  11  76
>>> 

相关问题 更多 >