質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

7562閲覧

pythonにて、月別集計をしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2018/10/10 05:38

編集2018/10/10 05:40

レジャー施設の利用状況(回数)について、調べたいとします。
dataframeは下記のような感じです。
人    日付
Aさん 2018.06.13
Bさん 2018.07.02
Bさん 2018.07.03
Cさん 2018.06.25
Bさん 2018.08.07
Aさん 2018.08.01
Aさん 2018.08.02
Cさん 2018.09.10

人別に、月単位での利用回数を集計したいのですが、人別に日付のソートはできたものの、
月単位の集計ができません。(下記コード)
一括での出力が難しいため、とりあえず日付を月表示にし、その後、カウントで集計しようと思います。
df2 = df.sort_values('人')
df2.to_csv("loopy.csv", encoding="cp932")
ここまでは走り、
人別に日付をソートしたファイルになりました。
そこから行き詰っています。
df3 = df2.strftime('%m')
df3.to_csv("loopy2.csv", encoding="cp932")
初めからgroupbyによるコードも試みましたが、うまくいきませんでした。
どなたか月毎の集計コードを教えてください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

どのような結果が欲しいのかいまひとつわかりませんが、
こんな感じでしょうか?

Python

1import pandas as pd 2import io 3 4data=""" 5人,日付 6Aさん,2018.06.13 7Bさん,2018.07.02 8Bさん,2018.07.03 9Cさん,2018.06.25 10Bさん,2018.08.07 11Aさん,2018.08.01 12Aさん,2018.08.02 13Cさん,2018.09.10 14""" 15 16df = pd.read_csv(io.StringIO(data)) 17# 日付を datetime型にしておく 18df['日付'] = pd.to_datetime(df['日付']) 19df['月'] = df['日付'].dt.month 20res = df.pivot_table(index='月', columns='人', aggfunc='size', fill_value=0) 21print(res) 22#人 Aさん Bさん Cさん 23#月 24#6 1 0 1 25#7 0 2 0 26#8 2 1 0 27#9 0 0 1

投稿2018/10/10 07:32

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/11 00:29

理想の結果(形)です‼ 回答例のように、きれいに出力されました☆ ただ、 df = pd.read_csv(io.StringIO(data)) の構文を入れるとエラーになり 省くとなぜかきれいに集計されました。 日付が文字列ではなかったということでしょうか。。。 その点が少しモヤモヤするものの 集計結果、表示の形にとても満足しており、ベストアンサーとさせていただきます。 おかげさまで本日の気分は上々です♪ どうもありがとうございました☆
guest

0

#追記

pandasでユニークな要素の個数、頻度(出現回数)をカウント

pandas使った例で回答し直します。

import pandas as pd filename_in = r'C:\workspace\tmp\人_日付.csv' df = pd.read_csv(filename_in,encoding='utf-8',engine='python') vc = df['人'].value_counts(sort=True) print(df) print(vc)
人 日付 0 A 2018.06.13 1 B 2018.07.02 2 B 2018.07.03 3 C 2018.06.25 4 B 2018.08.07 5 A 2018.08.01 6 A 2018.08.02 7 C 2018.09.10 A 3 B 3 C 2 Name: 人, dtype: int64

##以下初期回答
考え方だけですが・・・

データの形を文字列操作して

Aさん 2018.06.13
Bさん 2018.07.02

Aさん 201806
Bさん 201807

とすれば年月をキーとしてカウント出来ると思います。

投稿2018/10/10 05:59

編集2018/10/10 11:36
opyon

総合スコア1009

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/10 06:24

早速回答いただきありがとうございます。 df3 = df2.strftime('%y,%m') としてみましたが、うまくいきません。 引き続き、模索しようと思います。
退会済みユーザー

退会済みユーザー

2018/10/11 00:39

再度回答いただき、どうもありがとうございます。 説明不足で申し訳なかったのですが、 人別、更に月別に集計したいので、 magichanさんの回答例のような結果(形)となる コードについて考えていました。 質問で記載した「ここまでは走る」のコードでも 人別の集計は出ました。 ただ、opyonさんのコードの方が見た目すっきりしますね。 勉強になりました。ありがとうございました☆
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問