【问题标题】:Trying to iterate through a column to populate another column尝试遍历一列以填充另一列
【发布时间】:2021-04-20 21:47:13
【问题描述】:

我正在尝试填充列 num_crimes。由于邮政编码在房屋数据框中重复,我只想从包含每个邮政编码的所有犯罪的字典中添加与该邮政编码相关的犯罪数量。

房屋数据框包含 5000 个条目,而字典仅包含 67 个,所以我不能只合并它们。

这是房屋数据框:

sold_price | zipcode | fireplaces | num_crimes
 5300000   |  85637  |      6     | NaN
 4200000   |  85646  |      5     | NaN
 4200000   |  85646  |      5     | NaN
 4500000   |  85646  |      6     | NaN
 3411450   |  85750  |      4     | NaN
        

这是字典:

{85141: 1,85601: 2, 85607: 1, 85614: 4, 85622: 2, 85629: 4, 85634: 1....}

问题:这是我使用的代码,但它不会改变 num_crimes 中的值:

def populate(df1):

for row, rows in df1.iterrows():
    
    if rows[1] in my_dict:
        rows[3]=my_dict[rows[1]]
    else:
        rows[3]=0

【问题讨论】:

  • rows 对象不会是副本而不是引用 .object。更简单的方法是将您的字典加载到数据框中并执行merge。将您的数据粘贴为文本而不是图像
  • 我修复了数据问题。我不能只是合并,因为房屋数据框有 5000 个数据点,而我的字典只有 67 个数据点。

标签: pandas dictionary append iteration


【解决方案1】:

你可以这样做:

df["num_crimes"] = df["zipcode"].apply(lambda z: my_dict[z])

如果您的 df 中的邮政编码不在 my_dict 中,您也需要处理:

df["num_crimes"] = df["zipcode"].apply(lambda z: my_dict[z] if z in my_dict else -1)

【讨论】:

  • 它给了我一个错误,这是邮政编码的值,没有解释
  • 这可能意味着您的 df 中存在 df 中不存在的邮政编码。您可以在上面的代码中添加错误处理来处理它。
【解决方案2】:

如果您将数据发布为文本而不是图像,则更容易回答您的问题。无论如何,您可以将 dict 制作成数据框,然后将其与原始数据框连接。所以是这样的:

houses.set_index("Zipcode").join(pd.DataFrame.from_dict(my_dict, orient='index', columns = ["Crimes from dict"]))

这行得通吗?

【讨论】:

  • 我修复了数据问题。我不能只是合并,因为房屋数据框有 5000 个数据点,而我的字典只有 67 个数据点
  • 你不合并,你加入它。因此,df 中有 5k 个数据点,dict 中有 67 个数据点并不重要,因为它们将映射到键上。这是一个最小的例子: data = {'Zipcode': [1, 2, 1, 0]} df = pd.DataFrame.from_dict(data) df.set_index("Zipcode").join(pd.DataFrame.from_dict( {1:4},orient='index',列 = ["犯罪"]))。看看邮政编码为 1 的行如何在“犯罪”列中都有 4?
  • 谢谢,它删除了邮政编码列,但我可以合并回来。
  • 如果您能逐步解释该语法,我将不胜感激。它正在工作,但我不明白。到目前为止,谢谢你,我的好人。
猜你喜欢
  • 2023-03-30
  • 2016-08-09
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多