python-3.x - 根据条件更改熊猫数据框子组上特定列的值
问题描述
我有一个类似于下面的数据框:
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
推荐阅读
- c# - Wpf LoadComponent 在尝试加载 app.xaml 时抛出 IoException
- python - imaplib.error:命令 SEARCH 在状态 AUTH 中非法
- javascript - 如何将 javascript 对象数组文件转换为自定义 json 文件
- java - SpringBoot - activiti - 获取活动任务列表
- gitlab - gitlab-ci.yml 在合并请求期间 rebase 后未正确重新加载
- java - can we achieve 100 percent Abstaction using Dependency inversion principle?
- cakephp-3.0 - 如何避免 _matchingData 并改为获取特定值
- java - 在 Kotlin 的同一个 Activity 中动态传递数据
- python - Brainfuck中优化的细胞增加
- dynamic - 带有“函数体返回 PL/SQL”的交互式网格列给出了引用列的错误(错误?)