python-3.x - 为什么 pandas dataframe.query -> assign 返回原始数据集大小?
问题描述
几个小时以来,我一直在寻找这个问题的答案。我正在使用 python 3.6.7 和 pandas 0.23.4。我正在尝试使用 query() 从数据框中获取行的子集,然后将其他列添加到该子集中。以下是代码片段:
df.query(f'({column}_c != {column}_c) & ({column}_t == {column}_t)')
.assign(reason='Calculated has value but target does not',
name=column,
calced=df[column + '_c'],
targeted=df[column + '_t'])
原始数据帧大约有 29K 行,当我只运行这个链的查询部分时,我得到 0 行。但是,在 assign() 之后,我又多了 29K 行。我认为 query() 复制了数据框,所以我不希望出现这种行为。任何人都知道发生了什么(我也尝试过 df[] 方法,结果相同)
解决方案
看来 assign() 中的“df”引用是原始数据帧。它将导致为原始数据框中的每一行构建一行。解决这个问题的方法是将过滤后的数据帧分配给一个临时变量并将其用于assign()。
推荐阅读
- php - 我需要帮助编写一个 sql 查询来连接多个字段
- r - 闪亮模块中的 hideTab
- java - java intellij GUI 表单
- splash-screen - 用户获取 - 谷歌广告结果与实际用户获取不匹配
- android - 自定义AlertDialog如何访问android.R.id.custom
- mysql - 使用 SYSTEM 时如何使用 MySQL Docker 修复日志中的时间戳,忽略夏令时?
- javascript - 使用 JS 计算相关连续概率 n 次
- http - Golang HTTP Timeout 测试,没有按预期超时
- html - 在网格中对齐图像
- python - PIL 如何打开 sRGB 图像?