You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame中AUTHOR列后的数值列大于0的值设为1?

解决DataFrame混合类型下仅对数值列将非0值转为1的问题

你的问题出在直接对整个混合类型的DataFrame做替换操作——AUTHOR列是字符串类型,其他日期列是数值类型,当你执行Counts[Counts != 0] = 1时,Python会尝试给字符串列(AUTHOR)也赋值数值1,这就触发了类型不匹配的错误。

要实现仅对日期列(数值列)进行转换,保留AUTHOR列不变,有以下几种可行方案:

方案1:指定目标列(按位置或列名)

如果明确知道日期列是AUTHOR之后的所有列,可以直接选中这些列进行转换:

# 获取AUTHOR之后的所有日期列
date_columns = Counts.columns[1:]
# 使用numpy.where高效替换:大于0的值设为1,否则保留原数值
Counts[date_columns] = np.where(Counts[date_columns] > 0, 1, Counts[date_columns])

也可以用applymap实现相同逻辑:

Counts[date_columns] = Counts[date_columns].applymap(lambda x: 1 if x > 0 else x)

方案2:自动识别数值型列

如果不确定日期列的位置,或者DataFrame里还有其他数值列需要处理,可以用select_dtypes自动筛选数值类型的列:

# 筛选所有数值型列
numeric_columns = Counts.select_dtypes(include=['number']).columns
# 先判断数值是否大于0(返回布尔值),再转为float类型(True→1.0,False→0.0)
Counts[numeric_columns] = Counts[numeric_columns].gt(0).astype(float)

执行上述任意一种方案后,就能得到你想要的结果:

AUTHOR        2022-07-01  2022-10-14      2022-10-15 .....
0            Kathrine          0.0         1.0              0.0
1            Catherine         0.0         1.0              1.0
2            Amanda Jane       0.0         0.0              0.0
3            Jaqueline         0.0         1.0              0.0
4            Christine         0.0         0.0              0.0

内容的提问来源于stack exchange,提问作者Raven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:50:26