Подсчет каждого уникального массива массива в каждой строке столбца во фрейме данных - PullRequest
1 голос
/ 15 октября 2019

Я практикую панд и питона, и я не очень хорош для петель. У меня есть кадр данных, как показано ниже: допустим, это df:

   Name        Value
    A      [[A,B],[C,D]]   
    B      [[A,B],[D,E]] 
    C      [[D,E],[K,L],[M,L]] 
    D      [[K,L]]

Я хочу просмотреть каждую строку, найти уникальные массивы и сосчитать их.

Я попытался np.unique (a, return_index = True), затем возвращает два разных списка, и моя проблема, я не знаю, как пройти через каждый массив.

Ожидаемый результат будет:

Value      Counts
[A,B]        2
[D,E]        2
[K,L]        2
[C,D]        1
[M,L]        1

Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 15 октября 2019

Использование DataFrame.explode в пандах +0.25:

df.explode('Value')['Value'].value_counts()

Вывод:

[K, L]    2
[A, B]    2
[D, E]    2
[C, D]    1
[M, L]    1
Name: Value, dtype: int64
1 голос
/ 15 октября 2019

Использование Series.explode с Series.value_counts:

df = df['Value'].explode().value_counts().rename_axis('Value').reset_index(name='Counts')
print (df)
    Value  Counts
0  [D, E]       2
1  [A, B]       2
2  [K, L]       2
3  [C, D]       1
4  [M, L]       1

Numpy решение:

a, v = np.unique(np.concatenate(df['Value']),axis=0, return_counts=True)

df = pd.DataFrame({'Value':a.tolist(), 'Counts':v})
print (df)
    Value  Counts
0  [A, B]       2
1  [C, D]       1
2  [D, E]       2
3  [K, L]       2
4  [M, L]       1
...