修改循环中pandas数据帧的条目

时间:2017-01-28 16:02:56

标签: python loops pandas dataframe

我想在数据框中添加每个记录的概率,因为我使用了for循环

def map_score(dataframe,customers,prob):
  dataframe['Propensity'] = 0
  for i in range(len(dataframe)):
      for j in range(len(customers)):
          if dataframe['Client'].iloc[i] == customers[j]:
              dataframe["Propensity"].iloc[i] = prob[j]

我能够正确映射与每个客户端关联的概率,但Python会抛出警告消息

  

正在尝试在DataFrame的切片副本上设置值。   尝试使用.loc [row_indexer,col_indexer] = value而不是

     

请参阅文档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy     来自ipykernel导入kernelapp作为app

当我使用.loc函数时,结果是错误的,我得到空值。 请建议一个好的方法来有条件地更新和添加条目

1 个答案:

答案 0 :(得分:1)

您正试图在副本上进行作业 dataframe["Propensity"]是一列,但是dataframe的“副本”。

但是,您正在使用i跟踪索引位置。因此,当您拥有列名.loc和索引位置"Propensity"时,如何使用i

在该位置指定一些变量,比如idx,等于dataframe.index

idx = dataframe.index[i]

然后,您可以将.loc与作业一起使用

dataframe.loc[idx, "Propensity"] = prob[j]
def map_score(dataframe,customers,prob):
  dataframe['Propensity'] = 0
  for i in range(len(dataframe)):
      idx = dataframe.index[i]
      for j in range(len(customers)):
          if dataframe['Client'].iloc[i] == customers[j]:
              dataframe.loc[idx, "Propensity"] = prob[j]