根据另一个值 pandas 更新列

我有已导出到 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()。


有什么帮助吗?


慕的地10843
浏览 88回答 2
2回答

神不在的星期二

这应该有效:df.loc[(df['answer']!='first') & (df['question']=='1.1'),'question'] = '1.10'

炎炎设计

尝试这个: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”,否则返回现有问题值。然后,我们通过将该函数应用于数据帧来生成一列,并用该列替换我们已有的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python