我有以下数据集:

index    REWARD
(1,1,1)   0
(1,2,3)   0
(1,1,3)   0


如果索引有一对数字,我想设置REWARD = 2。所以输出应该像

index    REWARD
(1,1,1)   0
(1,2,3)   0
(1,1,3)   2


当我使用这段代码

  def set_reward(final):
        for i in final['index']:
            tempCount=[]
            for item,count in collections.Counter((i)).items():
                tempCount.append(count)
            if tempCount==[2, 1] or tempCount==[1, 2]:
                final['REWARD']=2
            return final['REWARD']
    final['REWARD']=final.apply(set_reward,axis=1)


它说“ int”对象是不可迭代的”

有什么办法解决吗?

最佳答案

您无需显式使用循环和条件逻辑即可获得所需的结果。尝试这样的事情:

# Example data
df = pd.DataFrame({'index':  [(1, 1, 1), (1, 2, 3), (1, 1, 3)],
                   'REWARD': [0, 0, 2]})


# Select any row whose index contains at least one pair of values
mask = df['index'].apply(lambda x: 2 in Counter(x).values())

df.loc[mask, 'REWARD'] = 2

df
       index  REWARD
0  (1, 1, 1)       0
1  (1, 2, 3)       0
2  (1, 1, 3)       2

关于python - 使用itertools并将函数应用于每一行时,“int”对象不可迭代”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56414160/

10-11 03:26