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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

241閲覧

Pandasでgroupbyを使って1行にデータをまとめたい

fideo

総合スコア55

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2022/05/24 10:06

編集2022/05/25 01:51

やりたいこと
表1のように定刻[変更]が同じがある時がありますので、
表2のように1行にまとめたいです。

Pandasのgroupbyを使って、やって見ましたが、実現したい結果
と上手くいかないです。

コードには何がいけないか。
もしくは他に簡単な方法がありましたら、教えていただけると嬉しいです。
お手数ですが、よろしくお願い致します・

表1.csv

定刻[変更],出発地,経由地,航空会社,便名,機種,ターミナル,運航状況 00:15[ - ],マニラ,,フィリピン航空,PR0424,321,T3,欠航 05:00[05:06],ロサンゼルス,,ANA,NH0105,77N,T3,到着済み 05:00[05:06],ロサンゼルス,,ユナイテッド航空,UA7983,77N,T3,到着済み 05:00[ - ],サンフランシスコ,,ANA,NH0107,78I,T3,欠航

実現した処理の結果
今回はロサンゼルス定刻[変更]が同じ場合、
表2のように1行にまとめて、カンマ区切りもしくは空白で記載したいです。

表2.csv

定刻[変更],出発地,経由地,航空会社,便名,機種,ターミナル,運航状況 00:15[ - ],マニラ,,フィリピン航空,PR0424,321,T3,欠航 05:00[05:06],ロサンゼルス,,ANA ユナイテッド航空,NH0105 UA7983,77N,T3,到着済み 05:00[ - ],サンフランシスコ,,ANA,NH0107,78I,T3,欠航

現在のdf_afterの結果は1行でまとめておりますが、
上記のように実現したい処理にならないです。
機種,ターミナル,運航状況の行などの行が重複されます。
またなぜか経由地のセルに0.0として表示されます。

定刻[変更] 出発地 経由地 航空会社 便名 機種 ターミナル 運航状況 0 00:15[ - ] マニラ 0.0 フィリピン航空 PR0424 321 T3 欠航 1 05:00[ - ] サンフランシスコ 0.0 ANA NH0107 78I T3 欠航 2 05:00[05:06] ロサンゼルスロサンゼルス 0.0 ANAユナイテッド航空 NH0105UA7983 77N77N T3T3 到着済み到着済み

コード

import pandas as pd #ファイル読み込み df = pd.read_csv(r"test.csv") print(df) # #データフレーム # df = pd.DataFrame(df1) # print(df) #参考ページ #https://qiita.com/propella/items/a9a32b878c77222630ae # a=df.groupby(['定刻[変更]','出発地','経由地','航空会社','便名','機種']).mean() # print(a) #After df_after = df.groupby('定刻[変更]').apply(lambda x: x.sum()).drop('定刻[変更]',axis=1).reset_index() print(df_after)

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

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

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

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

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

meg_

2022/05/24 10:34

何を参考にされたか分かりませんが、.mean()は数値に対して動作するものです。平均を計算するもので「1行にまとめ」ることには使用しません。
fideo

2022/05/25 00:11

回答ありがとうございます。 別の方法で試してみます。
guest

回答1

0

ベストアンサー

Python

1import pandas as pd 2import io 3import numpy 4 5data = ''' 6定刻[変更],出発地,経由地,航空会社,便名,機種,ターミナル,運航状況 700:15[ - ],マニラ,,フィリピン航空,PR0424,321,T3,欠航 805:00[05:06],ロサンゼルス,,ANA,NH0105,77N,T3,到着済み 905:00[05:06],ロサンゼルス,,ユナイテッド航空,UA7983,77N,T3,到着済み 1005:00[ - ],サンフランシスコ,,ANA,NH0107,78I,T3,欠航 11''' 12df = pd.read_csv(io.StringIO(data)) 13# 定刻[変更] 出発地 経由地 航空会社 便名 機種 ターミナル 運航状況 14# 0 00:15[ - ] マニラ NaN フィリピン航空 PR0424 321 T3 欠航 15# 1 05:00[05:06] ロサンゼルス NaN ANA NH0105 77N T3 到着済み 16# 2 05:00[05:06] ロサンゼルス NaN ユナイテッド航空 UA7983 77N T3 到着済み 17# 3 05:00[ - ] サンフランシスコ NaN ANA NH0107 78I T3 欠航 18 19def myJoin(x): 20 if len(x) > 1: 21 data = [] 22 for col in x.columns: 23 if np.all(pd.isna(x[col])): 24 data.append(np.nan) 25 else: 26 data.append(",".join(set(x[col]))) 27 df = pd.DataFrame(data).T 28 df.columns = x.columns 29 return df 30 else: 31 return x 32 33df = df.groupby("定刻[変更]").apply(myJoin) 34df =df.reset_index(drop=True) 35# 定刻[変更] 出発地 経由地 航空会社 便名 機種 ターミナル 運航状況 36# 0 00:15[ - ] マニラ NaN フィリピン航空 PR0424 321 T3 欠航 37# 1 05:00[ - ] サンフランシスコ NaN ANA NH0107 78I T3 欠航 38# 2 05:00[05:06] ロサンゼルス NaN ANA,ユナイテッド航空 UA7983,NH0105 77N T3 到着済み

投稿2022/05/25 12:01

meg_

総合スコア10580

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

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

fideo

2022/05/27 02:12

回答ありがとうございます。こちらの方法で問題なくできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問