根据另一个值更新列 pandas

Update column based on another value pandas

我有已导出到 excel 的问卷数据。我目前正在尝试清理数据,但遇到了问题。它在调查软件中的编号为 1.1 到 1.12,但是当它导出到 excel 时,它会从 1.10 变为 1。1.SO 我最终得到两个编号为 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()。

有什么帮助吗?

试试这个:

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

我们正在做的是使用 lambda 构建一个函数,它接收数据框的一行,如果问题是 1.1 而答案不是 returns '1.10' 'first' 和 returns 现有的问题值。然后,我们通过将该函数应用于数据框来生成一列,并用该列替换我们已有的问题。

这应该有效:

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