Панды групповой и средний из строки - PullRequest
1 голос
/ 13 апреля 2019

У меня есть образец DF:

df = pd.DataFrame(np.random.randint(1,10,size=(6,3)),columns = list("ABC"))
df["A"] = ["1111","2222","1111","1111","2222","1111"]
df["B"] = ["20010101","20010101","20010101","20010101","20010201","20010201"]
df

OP:

      A       B         C
0   1111    20010101    1
1   2222    20010101    8
2   1111    20010101    1
3   1111    20010101    3
4   2222    20010201    7
5   1111    20010201    8

Я пытаюсь найти среднее значение для столбца B с группировкой столбца A:

Например:

рассмотреть значение «1111» в столбце A: всего транзакций: 4, уникальных транзакций: 2 (20010101,20010201).таким образом, среднее значение равно 4/2 = 2

Фрагмент:

df.groupby("A",as_index=False).agg({"B":'mean'})

Ошибка:

DataError: No numeric types to aggregate

Любой способ панды найти это среднее значение напрямую, а не групповойи итерации.

1 Ответ

1 голос
/ 13 апреля 2019

Я не думаю, что вы ищете "среднее". Попробуйте это:

df.groupby('A')['B'].apply(lambda x: x.count() / x.nunique())

A
1111    2.0
2222    1.0
Name: B, dtype: float64

Или, если вы не любите применять, тогда

grp = df.groupby('A')['B']
grp.count() / grp.nunique()

A
1111    2.0
2222    1.0
Name: B, dtype: float64

А вот один вкладыш для приведенного выше, этот использует agg со многими редукторами:

df.groupby('A')['B'].agg(['count','nunique']).eval('count / nunique')

A
1111    2.0
2222    1.0
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...