在pandas中有效地执行需要访问多行的操作

时间:2018-02-26 19:01:32

标签: python pandas dataframe rows

是否有一种有效的方法来更新DataFrame中的每一行,并按顺序更新其下方的行?

DataFrame包含车辆按顺序行进的一系列位置。我添加了两个新列next_xnext_y,并希望逐行填充这些列,直接使用行中current_xcurrent_y列中的值下面。然后每行的想法将包含描述位置的坐标对和车辆行进的下一个位置。

这是使用iterrows工作,但在整个数据集上速度过慢。

for index, row in df.iterrows():
    if int(index) < len(df)-1:
        df['next_x'].iloc[int(index)] = df['current_x'].iloc[(int(index)+1)]
        df['next_y'].iloc[int(index)] = df['current_y'].iloc[(int(index)+1)]

我无法找到使用apply的好方法 - 我错过了什么?

2 个答案:

答案 0 :(得分:1)

试试这个:

df[['next_x', 'next_y']] = df[['current_x', 'current_y']].shift(-1)

答案 1 :(得分:1)

你正在寻找熊猫的“转变”。

    df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),columns=['a', 'b', 'c', 'd', 'e'])

df.shift(1)会给你所有向下移动的行。

然后你只需要:

df- df.shift(1)
祝你好运!