seq*_*ard 7 python iteration dataframe pandas
我正在尝试创建一个逐行迭代pandas数据帧的函数.我想基于其他列的行值创建一个新列.我的原始数据框可能如下所示:
df:
A B
0 1 2
1 3 4
2 2 2
Run Code Online (Sandbox Code Playgroud)
现在我想在每个索引位置创建一个填充了列A - 列B的行值的新列,以便结果如下所示:
df:
A B A-B
0 1 2 -1
1 3 4 -1
2 2 2 0
Run Code Online (Sandbox Code Playgroud)
我工作的解决方案,但只有当我不在函数中使用它时:
for index, row in df.iterrows():
print index
df['A-B']=df['A']-df['B']
Run Code Online (Sandbox Code Playgroud)
这给了我想要的输出,但当我尝试将它用作函数时,我收到一个错误.
def test(x):
for index, row in df.iterrows():
print index
df['A-B']=df['A']-df['B']
return df
df.apply(test)
ValueError: cannot copy sequence with size 4 to array axis with dimension 3
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么,我怎么能让它发挥作用?
这是因为apply方法默认适用于列,axis如果您希望通过行,请更改为 1:
轴:{0 或 'index',1 或 'columns'},默认为 0
- 0 或 'index':对每一列应用函数
- 1 或“列”:将函数应用于每一行
df.apply(test, axis=1)
Run Code Online (Sandbox Code Playgroud)
编辑
我认为您需要对每一行进行复杂的操作。如果您只需要从彼此减去列:
df['A-B'] = df.A - df.B
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19114 次 |
| 最近记录: |