我有已经导出到excel的Questionairre数据。我目前正在尝试清除数据,但是有问题。在调查软件中,它的编号从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()。
有什么帮助吗?
答案 0 :(得分:1)
尝试一下:
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”,然后返回现有问题的价值反之亦然。然后,我们通过将该函数应用于数据框来生成一列,并替换该列中我们已有的问题。
答案 1 :(得分:1)
这应该有效:
df.loc[(df['answer']!='first') & (df['question']=='1.1'),'question'] = '1.10'