为了账号安全,请及时绑定邮箱和手机立即绑定

根据另一个值 pandas 更新列

根据另一个值 pandas 更新列

慕的地10843 2023-09-19 15:20:46
我有已导出到 Excel 的问卷数据。我目前正在尝试清理数据,但遇到了问题。它在调查软件中的编号从 1.1 到 1.12,但是当它导出到 Excel 时,它会更改为 1.10 到 1.1。所以我最终得到两个编号均为 1.1 的问题。我希望能够重新编号应该为 1.10 的问题数据看起来像这样data = [[1, '1.1', 'first'],        [1, '1.2', 'yes'],        [1, '1.1', 'daily'],       [2, '1.1', 'last'],        [2, '1.2', 'yes'],        [2, '1.1', 'weekly']]df = pd.DataFrame(data, columns = ['user_id', 'question', 'answer'])我希望它看起来像这样data2 = [[1, '1.1', 'first'],         [1, '1.2', 'yes'],         [1, '1.10', 'daily'],        [2, '1.1', 'first'],         [2, '1.2', 'yes'],         [2, '1.10', 'weekly']]df2 = pd.DataFrame(data2, columns = ['user_id', 'question', 'answer'])我试过这个if df[(df.question == '1.1')]:    if df[(df.answer == 'first')]:        df.question == '1.1'    else:        df.question == '1.10'但得到这个错误ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。有什么帮助吗?
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

这应该有效:

df.loc[(df['answer']!='first') & (df['question']=='1.1'),'question'] = '1.10'


查看完整回答
反对 回复 2023-09-19
?
炎炎设计

TA贡献1808条经验 获得超4个赞

尝试这个:

df['question'] = df.apply(lambda row: '1.10' if (row['question'] == '1.1' and row['answer'] != 'first') else row['question'], 1)

我们正在做的是构建一个函数,lambda该函数接受数据帧的单行,如果问题是 1.1 并且答案不是“first”,则返回“1.10”,否则返回现有问题值。然后,我们通过将该函数应用于数据帧来生成一列,并用该列替换我们已有的问题。


查看完整回答
反对 回复 2023-09-19
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信