2016-12-13 2 views
2

Я использую панд, чтобы показать dataframe, и мой ДФ выглядит так:Python панд - объединить dataframes строки

Day  Hour  Name  Msg 
sunday  10  a  b 
sunday  11  a  b 
sunday  11  a  b 
monday  12  a  b 
tuesday 10  a  b 
tuesday 10  a  b 

теперь я хочу, чтобы суммировать его выглядеть так:

sunday 3 
monday 1 
tuesday 2 

и поместите эти данные в фреймворк данных, чтобы я мог его построить.

любая идея, как я могу это сделать? Спасибо!

ответ

3

Я думаю, что вам нужно groupby с совокупным size

print (df.groupby('Day').size()) 
Day 
monday  1 
sunday  3 
tuesday 2 
dtype: int64 

, а затем при необходимости участок bar:

import matplotlib.pyplot as plt 

df.groupby('Day').size().plot.bar() 
plt.show() 

graph

Если заказ О.Д. дней важен колонок новообращенного Day в ordered categorical:

import matplotlib.pyplot as plt 

cat = ['sunday','monday','tuesday'] 
df.Day = df.Day.astype('category', ordered=True, categories=cat) 

df.groupby('Day').size().plot.bar() 
plt.show() 

graph1

Если не хотите использовать categorical, другое решение reindex по cat:

cat = ['sunday','monday','tuesday'] 
df.groupby('Day').size().reindex(cat).plot.bar() 
plt.show() 
+0

благодарственное у но я не понял «упорядоченного категорического», «что это такое? Я не мог понять по указанному вами адресу. – DramboHero

+0

извините, это была плохая ссылка. необходимо http://pandas.pydata.org/pandas-docs/stable/categorical.html # sorting-and-order – jezrael

+0

Итак, после groupby вы получите первый столбец под названием 'index' из' days' и отсортирован по алфавиту. Но если нужна специальная сортировка, например, по дням недели, нужно создать упорядоченные категории - тогда она сортируется по порядку значений в 'list'' cat' – jezrael

1

jezrael's answer велик, но есть немного более легкий путь:

df.Day.value_counts() 

Доходность:

sunday  3 
tuesday 2 
monday  1 
Name: Day, dtype: int64 

Они заказываются от самых маленьких до небольших групп, что помогает не потеряться. Если вы хотите их в определенном порядке, переиндексации к исходному порядку:

df.Day.value_counts().reindex(df.Day.unique()) 

Отдает:

sunday  3 
monday  1 
tuesday 2 
Name: Day, dtype: int64 

Вы также можете заказать их так, как вам нравится, давая пользовательский список .reindex().

Для черчения, вы можете сделать:

df.Day.value_counts().plot.bar() 

Или

df.Day.value_counts().plot.bar(figsize=(2,2)) 

Для:

Смежные вопросы