python - 'int' 对象不可迭代”当使用 itertools 并将函数应用于每一行时
问题描述
我有以下数据集:
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'对象是不可迭代的”
有什么办法可以解决吗?
解决方案
您可以在没有显式 for 循环和条件逻辑的情况下获得所需的结果。尝试这样的事情:
# 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
推荐阅读
- audio - 如何在颤动中获取音频文件的持续时间?
- sql - 我怎样才能使我的查询优化以减少执行时间
- r - 如何使用多个变量或维度进行扩展
- javascript - 使用 server.js 和 proxy.config.json 使用 Protractor 模拟服务
- laravel - 雄辩的查询哪里和条件或哪里和不同的条件
- unity3d - 轮廓着色器统一类似于 Gizmo 编辑器
- php - ReflectionException:类 PermissionsTableSeeder 不存在
- unity3d - 私有接口下的属性总是返回零
- c# - Asp.Net Core 从 appsettings.json 获取 json 数组
- java - reduce() 方法如何与 Java 8 中的并行流一起工作?