我想在数据框中添加每个记录的概率,因为我使用了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函数时,结果是错误的,我得到空值。 请建议一个好的方法来有条件地更新和添加条目
答案 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]