Уникальные значения и их количество для каждого столбца в кадре данных pandas

Я создал этот тест, чтобы исследовать проблемы в наборе данных. Теперь я хочу расширить его, чтобы иметь подсчет наиболее и наименее частых значений (максимум 10 значений, но было бы неплохо, если бы это можно было регулировать)

lvl1 = ['A','A','A','A','A','B','B','B','B',np.nan ]
lvl2 = ['foo','foo','bar','bar','bar','foo','foo','foo','bar','bar']
lvl3=  [1,1,1,2,2,3,3,4,5,6]
df = pd.DataFrame({ 'L1' : lvl1, 'L2' : lvl2, 'L3':lvl3})


df.apply(lambda x: [ 100*(1-x.count()/len(x.index)),x.dtype,x.unique()],result_type='expand').T.rename(index=str, columns={0: "Nullity %", 1: "Type",2:"Unique Values"})

Это дает

 Nullity %   Type    Unique Values
L1  10        object  [A, B, nan]
L2  0         object  [foo, bar]
L3  0         int     [1,2,3,4,5,6]

Как я могу расширить его до:

   Nullity %   Type    UniuqueValue1 UniuqueValue2 UniuqueValue3 ... UniuqueValue-3  UniuqueValue-2  UniuqueValue-1
L1  10         object  A:5               B:4          nan:1
L2  0          object  foo:5             bar:5
L3  0           int    1:3               2:2           3:2      ...   4:1             5:1               6:1  

Обновлено: пока мне удалось сделать это для одного столбца.

c1=df['L1'].value_counts(dropna=False).reset_index()

c1['L1']=c1['index'].astype(str)+'('+c1['L1'].astype(str)+')'

c1.drop('index', axis=1).T

который дает

    0       1       2
L1  A(5)    B(4)    nan(1)

Ожидается, что A:5 будет строкой?

timgeb 31.10.2018 14:01

@timgeb да, но это не проблема, если строка имеет другую форму, например A (5), или в отдельных столбцах. Самым важным является отображение информации об уникальных значениях и их количестве, начиная с наиболее частого значения.

hashimov 31.10.2018 14:05
0
2
31
0

Другие вопросы по теме