다음과 같은 팬더 데이터 프레임이 있습니다.
col1, col2, label
a, b , cat
b, b1, , mouse
.
.
.........., elephant
.........., mouse
및 value_counts
레이블 열 :
df.dataframe.value_counts:
cat: 7599
mouse: 6458
dog: 5100
elephant: 5000
내 value_counts가 다음과 같이되도록 각 레이블 범주에서 무작위로 N 개 이상의 행을 선택하고 싶습니다.
cat: N
mouse: N
dog: N
elephant: N
이 작업을 수행하는 "판도적인"방법이 있습니까?
먼저 sample (frac = 1) 방법을 사용하여 DF를 섞은 다음 각 그룹에서 처음 N 개 행을 선택할 수 있습니다 (으로 그룹화 됨 label
).
df.sample(frac=1).groupby('label', sort=False).head(N)
데모:
In [108]: df.sample(frac=1).groupby('label', sort=False).head(3)
Out[108]:
col1 label
11 9 a
28 4 a
58 0 a
96 5 c
99 3 b
35 6 c
88 8 c
97 9 b
83 7 b
설정:
In [106]: df = pd.DataFrame({'label':np.random.choice(list('abc'), 100), 'col1':np.random.randint(0, 10, 100)})
In [107]: df
Out[107]:
col1 label
0 4 c
1 6 b
2 9 c
3 0 b
4 5 a
5 3 a
6 3 b
7 6 c
8 7 b
9 6 a
.. ... ...
90 4 b
91 5 b
92 8 c
93 2 c
94 9 a
95 2 a
96 5 c
97 9 b
98 8 b
99 3 b
[100 rows x 2 columns]
힌트 : 가능한 최대 N을 찾으려면 다음 코드를 사용할 수 있습니다 ( 아이디어에 대해 @NickilMaveli 에게 감사드립니다 ).
N = df.label.value_counts(sort=False).min() # (or) df.label.value_counts().iloc[-1]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다