【问题标题】:Trying to iterate over a df and add a column with a value for each row尝试遍历 df 并为每一行添加一个包含值的列
【发布时间】:2015-10-28 20:34:18
【问题描述】:

我正在尝试使用两个数据框向我的一个数据框添加一个新列 num_events。

我的第一次尝试是使用iteritems(),但我得到了错误:KeyError: 'min_lat'

基本代码:

for index, row in v_roads.iteritems():
  min_lat = row['min_lat']
  min_lon = row['min_lon']
  max_lat = row['max_lat']
  max_lon = row['max_lon']
  total_events = 0
  for i, r in accidents.iteritems():
        e_lat = r['latitude']
        e_lon = r['longitude']
        if e_lat >= min_lat and e_lat <= max_lat and e_lon >= min_lon and e_lon <= max_lon:
           total_events += 1
 row['num_events'] = total_events

我知道iteritems() 懒惰地迭代 (index, value) 元组,但我不确定另一种方法来做我想做的事情,即对于每一行,获取行列中的数据,min_lat, min_lon 等并将该数据存储在变量中。

有人可以为我指明正确的方向吗?

编辑:为了澄清这一点,是的,我确实想添加一个新列,但我一直无法从特定行的列中读取数据。

数据示例

v_roads

事故

【问题讨论】:

  • 请提供一个小数据样本。
  • @BrenBarn 确定,现在添加
  • 那个样本太小了,因为它似乎只有一行。此外,它不是一种可以轻松复制粘贴(或读取,因为它完全不对齐)的格式。最好的办法是制作一个小数据框,发布它,并显示一个独立的代码 sn-p,其输出为在相同的示例数据上运行。
  • 两者都是 :) 但我首先将其分解为一个更简单的问题。看看新数据@BrenBarn
  • 听起来您想要做的就是从另一个 df 添加 cols 或仅提取 4 列,您能解释一下您正在尝试做什么,因为您正在做的事情违背了使用的目的dfs

标签: python pandas dataframe


【解决方案1】:

所以为了解决这个问题,我就是这样做的:

    for row in v_roads.itertuples():
       # Where 11 is the index of the min_lat col...
       min_lat = row[11]
       min_lon = row[12]
       ...

这并不难,所以希望这可以帮助其他有类似问题的人。

请注意,元组是不可变的,因此如果您想进行更改,您需要执行以下操作:

    for i, row in v_roads.head(1000).iterrows():
       v_roads.set_value(i, 'colNameHere', variableToPlace)

【讨论】:

    猜你喜欢
    • 2021-08-12
    • 2013-11-03
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多