【问题标题】:Get Prior Row of Dataframe in For Loop Python在 For Loop Python 中获取数据框的前一行
【发布时间】:2020-05-31 23:20:28
【问题描述】:

这是我认为是一个简单的逻辑问题,但我一直在研究这个问题并没有弄清楚,所以希望有人能找到我一直缺少的简单解决方案。我希望能够使用以下代码获取数据帧的前一部分,并已解决第四行中的 (row-1) 解决方案,但这显然不起作用。

for row in players_at_start_of_period.iterrows():
    if(row[1]['PERIOD']):
        continue
    elif(row[1]['PERIOD'] - 2) > (row-1)[1]['PERIOD']:
        sub_map.update = {row[1]['TEAM_ID_1']: split_row(row[1]['TEAM_1_PLAYERS']), row[1]['TEAM_ID_2']: split_row(row[1]['TEAM_2_PLAYERS'])}
    else:
        continue

我可以做些什么来访问在“行”的当前值之前存在一次迭代的值?谢谢!

【问题讨论】:

  • 您能否与预期的输出共享一个示例数据帧(请不要图片),并且有人应该能够更好地解决您的 for 循环
  • 你能解释一下代码的作用吗?
  • 也许您需要shift 来创建将值移动/移动到上一行/下一行的列,这样您就可以将两个值放在同一行中。

标签: python pandas dataframe for-loop iteration


【解决方案1】:

在我看来,我们可以在循环中添加一个previous_row,在迭代退出之前复制当前行的值。这将有助于在下一次迭代中将当前行与 previous_row 进行比较。

让我知道这个逻辑是否适合你。

【讨论】:

  • 我认为编写代码以显示您在说什么会很有帮助。绝对听起来有道理。唯一需要考虑的是在第一次迭代中会发生什么,OP 没有详细说明。
【解决方案2】:

我不确定你的数据是怎样的,但是iterrows() 已经返回了索引,所以你可以这样做:

import pandas as pd
import random
# read the data from the downloaded CSV file.
df = pd.read_csv('https://s3-eu-west-1.amazonaws.com/shanebucket/downloads/uk-500.csv')
# set a numeric id for use as an index for examples.
df['index'] = [random.randint(0,1000) for x in range(df.shape[0])]
for index, row in df.iterrows():
    previous_name = ''
    if index > 0:
        previous_name = df.loc[index - 1]['first_name']
    print(previous_name, df.loc[index]['first_name'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2021-03-21
    • 2022-11-17
    • 2017-09-02
    • 2013-10-13
    相关资源
    最近更新 更多