【发布时间】:2020-06-05 23:23:36
【问题描述】:
我正在尝试根据连续列值更新数据框列。
如果列说 col1 和 col2 具有 >0 和
数据框看起来像:
id col0 col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
1 0 5 -5 5 -5 0 0 1 4 3 -3
2 0 0 0 0 0 0 0 4 -4 0 0
3 0 0 1 2 3 0 0 0 5 6 0
应用逻辑后所需的数据框:
id col0 col1 col2 col3 col4 col6 col7 col8 col9 col10 fix
1 0 0 0 0 0 0 0 1 4 0 0 0 3
2 0 0 0 0 0 0 0 0 0 0 0 0 1
3 0 0 1 2 3 0 0 0 5 6 0 9 0
我试过了:
def fix_count(row):
row['fix_cnt'] = 0
for i in range(0, 10):
if ((row['col' + str(i)] > 0) &
(row['col' + str(i + 1)] < 0)):
row['col' + str(i + 1)] = row['col' + str(i)] + row['col' + str(i + 1)]
row['col' + str(i)] = 0
row['fix_cnt'] += 1
return (row['col' + str(i)],
row['col' + str(i + 1)],
row['fix_cnt'])
df.apply(fix_count, axis=1)
失败了IndexError: index 11 is out of bounds for axis 0 with size 11.
我也查看了df.iteritems,但我找不到路。
DDL 生成 DataFrame:
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3],
'col0': [0, 0, 0],
'col1': [5, 0, 0],
'col2': [-5, 0, 1],
'col3': [5, 0, 2],
'col4': [-5, 0, 3],
'col5' : [0, 0, 0],
'col6': [0, 0, 0],
'col7': [1, 4, 0],
'col8': [4, -4, 5],
'col9': [3, 0, 6],
'col10': [-3, 0, 0]})
谢谢!
【问题讨论】:
-
您的数据中没有“col5”,但您正在使用 range(0,10) 进行迭代,其中循环中包含 5。
-
感谢指出,对不起,我错过了添加col5。更新了 col5 的查询。
-
感谢 anky,它的工作就像一个魅力,并且没有循环方法..只是好奇..它是如何使用循环方法完成的?