python - Pandas Groupby、过滤器和插入列
问题描述
我正在使用一个 Pandas 数据框,该数据框有一列带有代表客户的唯一 ID 代码。每个 ID 代码在表中的几行中重复出现。表中的另一列带有布尔标志,真或假。我正在尝试调整表格,以便对于每个 ID 代码,如果至少有一个标志设置为 true,它们都将设置为 true;即,您可以在 10 行中有一个客户 ID 代码,其中 9 行的标志设置为 false,但有一个设置为 true。我希望所有行现在都设置为 true。这是我尝试过的:
data=[
{"id":"a","flag":True},
{"id":"a","flag":True},
{"id":"a","flag":False},
{"id":"b","flag":False},
{"id":"a","flag":True},
{"id":"a","flag":True}]
df = pd.DataFrame(data)
df.groupby('id').filter(lambda x:(x['flag']==True).any())['mod_flag'] = True```
df[df['mod_flag'] != True] = False
但它在第二行抛出了一个关键错误mod_flag
。任何帮助将不胜感激 - 谢谢!
编辑:
在此处添加示例数据表以获得所需的输出:
ID | 旗帜 | mod_flag |
---|---|---|
一个 | 错误的 | 错误的 |
一个 | 错误的 | 错误的 |
b | 错误的 | 真的 |
b | 错误的 | 真的 |
b | 真的 | 真的 |
C | 真的 | 真的 |
C | 真的 | 真的 |
其中 ID = b 的行是需要更改的行。
解决方案
groupby()
将所有相关行放在一起transform()
为每项工作获得价值- 简单的熊猫系列
any()
df = pd.DataFrame({"client_id":np.random.randint(1,5,8),
"flag":np.random.choice([False,True], 8)}).sort_values("client_id")
df.assign(newflag=df.groupby("client_id")["flag"].transform(lambda s: s.any()))
client_id | 旗帜 | 新旗 | |
---|---|---|---|
3 | 1 | 真的 | 真的 |
6 | 1 | 错误的 | 真的 |
0 | 2 | 真的 | 真的 |
2 | 2 | 真的 | 真的 |
7 | 2 | 真的 | 真的 |
1 | 3 | 真的 | 真的 |
4 | 3 | 错误的 | 真的 |
5 | 4 | 错误的 | 错误的 |
推荐阅读
- google-admin-sdk - 查询 Admin Report API 以了解用户活动时未返回任何项目
- python - python shutil.move 使用文件修复移动目录
- performance - 如何提高Go中逐行读取大文件的速度
- uwp - 以编程方式选择 UWP TreeView 中的第一项
- rx-java2 - 从 API 设置订阅线程的最佳实践
- amazon-quicksight - 如何制作 QuickSight 分析的副本?
- java - Java printf (String, Val, String)
- r - terms.formula(formula, data = data) 中的错误:公式中的无效功率
- machine-learning - 神经网络中是否可以有多个输入?
- javascript - 替代使用 tabindex 使元素能够在 Chrome 中接收键输入