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

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

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

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

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

pandas

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

Q&A

解決済

1回答

1040閲覧

同姓同名がいた時に生年月日を元にデータ抽出

hiro3110

総合スコア2

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

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

pandas

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

0グッド

0クリップ

投稿2020/10/28 03:28

同姓同名がいた時に生年月日を元にデータ抽出

pythonで
Excelのデータをpandasで読み込み
名前でデータを分けてそれぞれに処理をしていきたいです.
このときに,同姓同名がいた場合,生年月日で区別してデータ抽出したいです

初心者です.よろしくお願いいたします.

試したソースコード

python

1df=pd.read_excel("****.xlsx") 2n=df["生年月日" and "名前"].unique() 3for name in n: 4 df_name=df[df["名前"]==name] 5

試したこと

unique関数を使って一度に分けようとしました
しかし,区別ができていなかったです.

補足情報(FW/ツールのバージョンなど)

最近始めたばかりなので,最新だと思います
windowsを使っています

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

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

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

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

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

guest

回答1

0

ベストアンサー

drop_duplicatesを使うと、重複データを削除できます。
名前と生年月日がともに重複しているデータを削除して、残りを取り出すには下記のようにします。

python3

1df_unique = df.drop_duplicates(subset=['名前', '生年月日'])

追記(変更)

python3

1import pandas as pd 2 3df = pd.DataFrame({"名前":["太郎" for i in range(4)] 4,"記録":[10,20,11,22] 5,"計測年":[2019,2020,2019,2020] 6,"生年月日":["10-28","10-28","3-28","3-28"]}) 7print(df) 8# 名前 記録 計測年 生年月日 9#0 太郎 10 2019 10-28 10#1 太郎 20 2020 11#2 太郎 11 2019 3-28 12#3 太郎 22 2020 13 14 15df_unique = df.groupby(['名前','生年月日']) 16for person in df_unique: 17 print(person[1]) 18# 名前 記録 計測年 生年月日 19#0 太郎 10 2019 10-28 20#1 太郎 20 2020 10-28 21 22# 名前 記録 計測年 生年月日 23#2 太郎 11 2019 3-28 24#3 太郎 22 2020 3-28

投稿2020/10/28 03:56

編集2020/10/28 06:35
jeanbiego

総合スコア3966

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

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

hiro3110

2020/10/28 05:24

回答ありがとうございます。 下記のような,個人のデータが複数ある場合はどうすればよいでしょうか? よろしくお願いいたします。 名前 記録 計測年 生年月日 a   10   2019  10-28 a   20   2020 a   11   2019  3-28 a   22   2020 ※aは同姓同名
jeanbiego

2020/10/28 05:59

追記しました。 ご覧の通り、同じコードで処理できます。例の場合は、生年月日が重複しているデータ(空欄)が1種類あったので、それだけ取り除かれていますね。
hiro3110

2020/10/28 06:06

迅速な回答ありがとうございます。 大変申し訳ございません 私のミスです 以下が正しいデータです. この場合はどうすれば良いでしょうか? 名前 記録 計測年 生年月日 a   10   2019  10-28 a   20   2020  10-28 a   11   2019  3-28 a   22   2020  3-28
jeanbiego

2020/10/28 06:14

編集しました。 同じ様に処理できます。
hiro3110

2020/10/28 06:23

私の説明不足なのですが 上の2行のaさん,と下の2行のaさんを それぞれ抽出したいです 例のデータがExcel内にあるとき a   10   2019  10-28 a   20   2020  10-28 を抽出して処理. 3,4行目のaさんのデータを抽出して処理. のような形で. 各々の記録の推移のグラフを作ろうと思っているため このように区別してデータを抽出したいです. 説明不足で誠に申し訳ございません.
jeanbiego

2020/10/28 06:36

なるほど、理解しました。 コード修正しました。
hiro3110

2020/10/28 08:35

何度も申し訳ございませんでした. ありがとうございました もしお時間ありましたら df_unique = df.groupby(['名前','生年月日']) for person in df_unique: print(person[1]) この部分についてどういう処理をしてるか 簡単に説明していただけないでしょうか? 特にgroupbyの使い方と,なぜperson[1]なのか疑問です. groupbyはよくmeanなどと一緒に使うものだと思っていたので... よろしくお願いいたします
jeanbiego

2020/10/28 09:09

パソコン離れてしまったので詳しく書きませんが、 groupbyはデータフレームを同じ要素(この場合、名前と生年月日)を持つグループに分割したイテレータを返します。 personは[1]を外してプリントしてみればわかると思います。
hiro3110

2020/10/28 15:12

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問