我有一个类似于以下数据框:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句