Dan*_*ty2 3 unique duplicates conditional-statements python-3.x pandas
给出以下数据框:
import pandas as pd
d=pd.DataFrame({'label':[1,2,2,2,3,4,4],
'values':[3,5,7,2,5,8,3]})
d
label values
0 1 3
1 2 5
2 2 7
3 2 2
4 3 5
5 4 8
6 4 3
Run Code Online (Sandbox Code Playgroud)
我知道如何计算这样的唯一值:
d['dup']=d.groupby('label')['label'].transform('count')
Run Code Online (Sandbox Code Playgroud)
结果如下:
label values dup
0 1 3 1
1 2 5 3
2 2 7 3
3 2 2 3
4 3 5 1
5 4 8 2
6 4 3 2
Run Code Online (Sandbox Code Playgroud)
但我想要的是一个具有以下值的列:
1
如果1 unique
每个标签列都有行,2
如果有,并且有duplicates
问题的行是first
这样0
的行,并且该行是duplicate
原始行.像这样:
label values dup status
0 1 3 1 1
1 2 5 3 2
2 2 7 3 0
3 2 2 3 0
4 3 5 1 1
5 4 8 2 2
6 4 3 2 0
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我认为你可以使用loc
函数创建的条件duplicated
:
d['status'] = 2
d.loc[d.dup == 1, 'status'] = 1
d.loc[d.label.duplicated(), 'status'] = 0
print (d)
label values dup status
0 1 3 1 1
1 2 5 3 2
2 2 7 3 0
3 2 2 3 0
4 3 5 1 1
5 4 8 2 2
6 4 3 2 0
Run Code Online (Sandbox Code Playgroud)
或加倍numpy.where
:
d['status1'] = np.where(d.dup == 1, 1,
np.where(d.label.duplicated(), 0, 2))
print (d)
label values dup status status1
0 1 3 1 1 1
1 2 5 3 2 2
2 2 7 3 0 0
3 2 2 3 0 0
4 3 5 1 1 1
5 4 8 2 2 2
6 4 3 2 0 0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
902 次 |
最近记录: |