python-3.x - 根据条件更改 pandas 数据框子组上特定列的值

标签 python-3.x pandas

我有一个类似于下面的数据框:

A B  C
1 0 0.0
1 2 0.2
1 3 1.0
2 1 0.2
2 4 0.0
2 6 1.0
3 1 0.4
3 2 1.0
3 0 0.9
3 3 0.0

现在,对于每个子组(其中子组将具有共享 A 值),我想找到具有最小 B 值的行,然后将该行的 C 值更改为 0.5。在这种情况下,我将获得一个新的数据框:

A B  C
1 0 0.5
1 2 0.2
1 3 1.0
2 1 0.5
2 4 0.0
2 6 1.0
3 1 0.4
3 2 1.0
3 0 0.5
3 3 0.0

作为附录,如果此操作替换 C 列中的 0.0 或 1.0,那么我希望该行与其旧值重复。在本例中,A=1 子组违反了此规则(0.0 被 0.5 替换),因此应生成:

A B  C
1 0 0.0
1 0 0.5
1 2 0.2
1 3 1.0
...

第一个问题是主要问题,第二个问题不是优先考虑的问题,但当然,欢迎就这两个问题提供帮助。

最佳答案

尝试:

df.loc[df.groupby('A')['B'].idxmin(), 'C'] = 0.5

输出:

   A  B    C
0  1  0  0.5
1  1  2  0.2
2  1  3  1.0
3  2  1  0.5
4  2  4  0.0
5  2  6  1.0
6  3  1  0.4
7  3  2  1.0
8  3  0  0.5
9  3  3  0.0

附录:

# minimum B rows 
min_rows = df.groupby('A')['B'].idxmin()
# minimum B rows with C==0
zeros = df.loc[min_rows].loc[lambda x: x['C']==0].copy()

# change all min rows to 0.5
df.loc[min_rows, 'C'] = 0.5

# concat with 0
df = pd.concat([df, zeros])

输出(注意最后一行):

   A  B    C
0  1  0  0.5
1  1  2  0.2
2  1  3  1.0
3  2  1  0.5
4  2  4  0.0
5  2  6  1.0
6  3  1  0.4
7  3  2  1.0
8  3  0  0.5
9  3  3  0.0
0  1  0  0.0

关于python-3.x - 根据条件更改 pandas 数据框子组上特定列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65294684/

相关文章:

python - 如何使用 importlib 在 python 中动态导入模块?

python - 基于其他条目的 Pandas 对列的操作

pandas - 如何通过检查标志查找值

python - Pandas 拆分和追加

python - 为什么 pandas 逻辑运算符没有像它应该的那样在索引上对齐?

python - 为什么小整数缓存似乎不适用于 Python 3 中 round() 函数的 int 对象?

OSX 上的 Django 安装

python - 如何在 Pandas 数据框中选择括号内的数据

python - flask 服务器 : Using a data in the same session

python - 选择特定的 CSV 列(过滤)-Python/pandas