根据另一个值更新列 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'
我有已导出到 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'