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

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

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

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

760閲覧

Python pandasでデータの整形加工について教えてください

onosan

総合スコア62

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2022/01/11 11:21

お世話になります。
初歩的なことですみません。Pythonのpandasのデータ整形加工で教えてください。
下記のデータは、施設と個人コードで個人を特定できます。
この時、人としては個人コードが267242と198000の2名がいるのですが、
この二人のそれぞれについて、最初のレコードには「start」カラムにSを入れて、最後のレコードには「end」カラムに、Eを入れるにはどうすればよろしいでしょうか。
shift関数などを使えそうなのですが、どうも、手が止まってしまいました。
何卒、よろしくお願い申し上げます。

施設個人コード年月Noステージ
1022965226724210
1022965226724221
1022965226724231
1022965226724241
1022965226724252
1022965226724262
1022965226724272
1022965226724282
1022965226724293
10229652267242103
10229652267242113
10229652267242123
1022980019800013
1022980019800023
1022980019800033
1022980019800043
1022980019800054
1022980019800064
1022980019800074
1022980019800084
1022980019800095
10229800198000105

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

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

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

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

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

guest

回答2

0

python

1idx = df.groupby(['施設', '個人コード']).apply(lambda x: x.index[[0, -1]]) 2df[['start', 'end']] = ['', ''] 3df.loc[idx.str[0], 'start'] = 'S' 4df.loc[idx.str[1], 'end'] = 'E' 5 6print(df) 7 8# 9 施設 個人コード 年月No ステージ start end 100 10229652 267242 1 0 S 111 10229652 267242 2 1 122 10229652 267242 3 1 133 10229652 267242 4 1 144 10229652 267242 5 2 155 10229652 267242 6 2 166 10229652 267242 7 2 177 10229652 267242 8 2 188 10229652 267242 9 3 199 10229652 267242 10 3 2010 10229652 267242 11 3 2111 10229652 267242 12 3 E 2212 10229800 198000 1 3 S 2313 10229800 198000 2 3 2414 10229800 198000 3 3 2515 10229800 198000 4 3 2616 10229800 198000 5 4 2717 10229800 198000 6 4 2818 10229800 198000 7 4 2919 10229800 198000 8 4 3020 10229800 198000 9 5 3121 10229800 198000 10 5 E

投稿2022/01/11 12:51

編集2022/01/11 13:00
melian

総合スコア20655

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

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

onosan

2022/01/11 13:29

ありがとうございます。こちらも参考にさせていただきます。ありがとうございます。
guest

0

ベストアンサー

groupbyを使います。

python

1>>> print(df) 2 施設 個人コード 年月No ステージ 30 10229652 267242 1 0 41 10229652 267242 2 1 52 10229652 267242 3 1 63 10229652 267242 4 1 74 10229652 267242 5 2 85 10229652 267242 6 2 96 10229652 267242 7 2 107 10229652 267242 8 2 118 10229652 267242 9 3 129 10229652 267242 10 3 1310 10229652 267242 11 3 1411 10229652 267242 12 3 1512 10229800 198000 1 3 1613 10229800 198000 2 3 1714 10229800 198000 3 3 1815 10229800 198000 4 3 1916 10229800 198000 5 4 2017 10229800 198000 6 4 2118 10229800 198000 7 4 2219 10229800 198000 8 4 2320 10229800 198000 9 5 2421 10229800 198000 10 5 25>>> 26>>> def f(x): 27... x['start'] = ['S'] + ['']*(len(x)-1) 28... x['end'] = ['']*(len(x)-1) + ['E'] 29... return x 30... 31>>> df_result = df.groupby('個人コード').apply(f) 32>>> print(df_result) 33 施設 個人コード 年月No ステージ start end 340 10229652 267242 1 0 S 351 10229652 267242 2 1 362 10229652 267242 3 1 373 10229652 267242 4 1 384 10229652 267242 5 2 395 10229652 267242 6 2 406 10229652 267242 7 2 417 10229652 267242 8 2 428 10229652 267242 9 3 439 10229652 267242 10 3 4410 10229652 267242 11 3 4511 10229652 267242 12 3 E 4612 10229800 198000 1 3 S 4713 10229800 198000 2 3 4814 10229800 198000 3 3 4915 10229800 198000 4 3 5016 10229800 198000 5 4 5117 10229800 198000 6 4 5218 10229800 198000 7 4 5319 10229800 198000 8 4 5420 10229800 198000 9 5 5521 10229800 198000 10 5 E

参考
pandas.DataFrameをGroupByでグルーピングし統計量を算出

投稿2022/01/11 11:46

編集2022/01/11 11:48
ppaul

総合スコア24670

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

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

onosan

2022/01/11 12:00

すごいスピードで回答いただき、ありがとうございました。groupbyでこんなこともできるというのが勉強になりました。感謝いたします。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問