javascript - 将 lambda 函数动态应用于列
问题描述
我有一个谷歌表,其中某些答案不在正确的位置。
实际上,我希望对于每一行,给定最后一列中的答案,如果答案尚未在 Answeri 列中,我们将这个答案移到第一列的左侧,即无。
也就是说得到这样的东西:
Questions Answer0 Answer1 Answer2 Answer3 Answer4 Answer6
3 What is your preference for a in-hotel grocery... 'Not preferred' 2 3 4 'Preferred' None
58 3 - If yes, on a scale of 0 -10, to what exten... 'Low affected' 2 3 4 5 'High affected'
到目前为止,我已经写了这个:
import pandas as pd
def put_at_right_place(row):
if row.Answer257 not in [None, np.nan]:
answer = row.Answer257
if answer not in row.Answer0:
for i in range(0,257):
# on choppe la premiere colonne qui n'est pas None
if row[f'Answer{i}']== None:
index_to_replace = 'Answer' + str(i-1)
row[index_to_replace] = row.Answer257
df = pd.read_csv('la_hoja_del_vinclulo.csv')
df.apply(lambda x: put_at_right_place(x), axis=1)
就像在 Google 表格中一样,我也很乐意尝试使用 Javascript 编辑器。
解决方案
既然我认为它的最终目标是实际分析数据......;)
我会融化你的df:
unique_cols = ["QID_x","URL_x","Questions",
"Answers_x","Section","QType_x",
"Theme","Topics"]
results = df.melt(id_vars=unique_cols,
var_name="Answer",
value_name="Value")
results = results[pd.notnull(results["Value"])]
您现在可以轻松分析每个问题:
results[results.QID_x == 1]
融化后,您可以返回并执行以下操作:
results.sort_values(by='Answer').pivot(index="QID_x", columns='Answer', values='Value')
然后重新加入(pd.merge)与初始帧(没有答案)。
推荐阅读
- angular - 获取 ID 并将页面重定向到产品详细信息时出现问题
- java - 批量更新 Spring JPA 存储库 (Java)
- json - pug/jade & gulp-merge-json 换行符
- android - Appium+Android+webdriverio,如何点击列表元素
- json - 如何在 Swift 中将 JSON 解析为嵌套结构?
- javascript - JavaScript 与 coffescript 语法 - if 条件:优化 if 语句结构
- jquery - 从 MVC 控制器读取 responseJson
- javascript - 这是 shouldComponentUpdate 的合理实现吗?
- eclipse - 当我从 maket 位置在 Eclipse 中安装 glassFish 工具时,出现错误,例如解决方案不可用
- javascript - 如何将 postcss 结果设置/返回给变量?