Группа рядов панд по процентам - PullRequest
2 голосов
/ 31 мая 2019

У меня есть фрейм данных.Я сгруппировал статус столбца по дате, используя

y = news_dataframe.groupby(by=[news_dataframe['date'].dt.date,news_dataframe['status']])['status'].count()

, и мой вывод -

date         status            count
2019-05-29   selected           24
             rejected auto     243
             waiting           109
             no action         1363
2019-05-30   selected           28
             rejected auto     188
             waiting           132
             no action         1249
             repeat              3
2019-05-31   selected           13
             rejected auto       8
             waiting             23
             no action          137
             repeat              2
             source              1
Name: reasonForReject, dtype: int64

Теперь я хочу вычислить процент каждой группы статуса по дате.Как я могу добиться этого с помощью pandas dataframe?

Ответы [ 3 ]

1 голос
/ 31 мая 2019

Я думаю, это самое короткое:

news_dataframe['date'] = news_dataframe['date'].dt.date
news_dataframe.groupby(['date','status'])['status'].count()/news_dataframe.groupby(['date'])['status'].count()
0 голосов
/ 31 мая 2019

попробуйте это:

# just fill the consecutive rows with this
df=df.ffill()
df.df1.columns=['date','status','count']
# getting the total value of count with date and status
df1=df.groupby(['date']).sum().reset_index()
#renaming it to total as it is the sum
df1.columns=['date','status','total']  

# now join the tables to find the total and actual value together
df2=df.merge(df1,on=['date']) 

#calculate the percentage
df2['percentage']=(df2.count/df2.total)*100

Если вам нужен один лайнер, его:

df['percentage']=(df.ffill()['count]/df.ffill().groupby(['date']).sum().reset_index().rename(columns={'count': 'total'}).merge(df,on=['date'])['total'])*100
0 голосов
/ 31 мая 2019

Вычислите две разные группы и поделите одну на другую:

y_numerator = news_dataframe.groupby(by=[news_dataframe['date'].dt.date,news_dataframe['status']])['status'].count()


y_denominator = news_dataframe.groupby(by=news_dataframe['date'].dt.date)['status'].count()

y=y_numerator/y_denominator
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...