Самый пандасоничный способ получения статистики о длине списков (средняя длина, максимальная длина и т. Д.) В столбце pandas df - PullRequest
0 голосов
/ 20 октября 2019

Я хотел бы получить статистику по длинам списка в столбце pandas df, таким как средняя длина, минимальное, максимальное, стандартное отклонение и т. Д.

Пример:

import pandas as pd

dfp = pd.DataFrame(
    {'trial_num': [[1, 2, 3, 1, 2, 3], [3,4,6,7], [2,2]],
     'subject': [[11, 2, 2, 2],[2,2,7],[4]]
    }
)
dfp

Вывод:

    trial_num   subject
0   [1, 2, 3, 1, 2, 3]  [11, 2, 2, 2]
1   [3, 4, 6, 7]    [2, 2, 7]
2   [2, 2]  [4]

Итак, для этого кадра данных мне нужна статистика по столбцам trial_num и subject.

Что-то вроде

trial_num
Average: 4
High: 6
Low: 2
Stdev: 2

То, что я пробовал

Я пытался

dfp.describe()

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-90-8a598dabea30> in <module>()
----> 1 dfp.describe()

6 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/algorithms.py in _value_counts_arraylike(values, dropna)
    748         # TODO: handle uint8
    749         f = getattr(htable, "value_count_{dtype}".format(dtype=ndtype))
--> 750         keys, counts = f(values, dropna)
    751 
    752         mask = isna(values)

pandas/_libs/hashtable_func_helper.pxi in pandas._libs.hashtable.value_count_object()

pandas/_libs/hashtable_func_helper.pxi in pandas._libs.hashtable.value_count_object()

TypeError: unhashable type: 'list'

Единственное решение, которое я могу придумать, - это использоватьдля вычисления среднего значения, максимума и минимума, затем со средним значением снова использовать итерроу для вычисления стандартного значения

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Вы можете использовать str.len, чтобы получить длину списка каждой строки. Тогда вы можете использовать .describe:

s = dfp['trial_num'].str.len()
s.describe()


       trial_num
count        3.0
mean         4.0
std          2.0
min          2.0
25%          3.0
50%          4.0
75%          5.0
max          6.0
1 голос
/ 21 октября 2019

Вы можете использовать series.explode или dataframe.explode и найти статистику,

dfp['trial_num'].explode().describe()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...