python - 根据 aggregion 和条件替换 pandas 中的值
问题描述
我有一个这样的数据框:
我想用特定值替换col1中的值(例如:用“b”)。我应该根据 col1 和 col2 计算每个组的记录。例如col1 = a, col2 = t 的计数是 3和col1 = a, col2 = u 是 1。
如果计数大于 2,则将 col1 的值替换为“b”。对于此示例,我想将所有“a”值替换为“b”,其中 col2 = t。
我尝试了下面的代码,但它并没有在这种情况下改变所有的“a”值。
import pandas as pd
df = pd.read_excel('c:/test.xlsx')
df.loc[df[(df['col1'] == 'a') & (df['col2'] == 't')].agg("count")["ID"] >2, 'col1'] = 'b'
我想要这个结果:
解决方案
您可以使用numpy.where
并检查是否满足所有条件。如果是,则将 col1 中的值替换为 b,否则保持原样:
import numpy as np
df['col1'] = np.where((df['col1']=='a') &
(df['col2']=='t') &
(df.groupby('col1')['ID'].transform('count') > 2),'b',df['col1'])
印刷:
ID col1 col2
0 1 b t
1 2 b t
2 3 b t
3 4 a u
4 5 b t
5 6 b t
6 7 b u
7 8 c t
8 9 c u
9 10 c w
使用transform('count')
, 将检查分组(按 col1)ID 列是否有超过 2 个值。
推荐阅读
- android - 设备解锁后启动视图的最佳方式是什么?
- python - 如何在本地托管 Django 项目?
- python - 循环遍历元组列表并解包每个元组的元素
- docker - Sapper:获取“FetchEvent for”
“导致网络错误响应:承诺被拒绝。” 在码头工人下 - python - Python:将声音从文件(mp3、wav、ogg)播放到不同的声音设备
- pandas - python重塑每n列
- c - 在 C 中打印最长公共子字符串的代码
- php - Laravel - 当播种机调用时使目录不起作用
- javascript - 如何使用 setInterval 构造 useEffect
- python - 如何在列向量中找到n个最大元素的索引,Python