groupby value_counts хранить в кадре данных - PullRequest
0 голосов
/ 09 января 2020

Мой фрейм данных выглядит как -

city
a
f
m
m
m
d

Я хочу сохранить эти данные в другом фрейме данных -

city       total
a           1
f           1
m           3
d           1

мой код -

df_city = df.groupby(['city'])['city'].count()

но не получаю правильных результатов.

Ответы [ 4 ]

2 голосов
/ 09 января 2020

Это будет делать:

df['city'].value_counts().to_frame(name="Total")
1 голос
/ 09 января 2020

Развивайте из ваших кодов

df.groupby('city').city.count().rename('total').reset_index()

Out[505]:
  city  total
0    a      1
1    d      1
2    f      1
3    m      3
0 голосов
/ 09 января 2020

Решение с groupby лучше, если вы хотите избежать сортировки total - добавьте Series.reset_index с параметром name:

df_city = df.groupby('city')['city'].count().reset_index(name='total')
print (df_city)
  city  total
0    a      1
1    d      1
2    f      1
3    m      3

Если использовать Series.value_counts вывод сортируется, для DataFrame добавить Series.rename_axis и Series.reset_index:

df_city = df['city'].value_counts().rename_axis('city').reset_index(name="total")
print (df_city)
  city  total
0    m      3
1    d      1
2    f      1
3    a      1
0 голосов
/ 09 января 2020

Не могли бы вы попробовать следующее.

df['total']=df.groupby('city').cumcount()+1
df.drop_duplicates('city',keep='last').reset_index(drop='True')

Чтобы сохранить это в кадре данных, используйте:

df['total']=df.groupby('city').cumcount()+1
df1=df.drop_duplicates('city',keep='last').reset_index(drop='True')
df1

Когда мы print df его значение будет следующим:

   city total
0   a   1
1   f   1
2   m   3
3   d   1
...