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

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

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

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

pandas

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

Q&A

解決済

1回答

2655閲覧

python で条件抽出

hiroway

総合スコア9

Python

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

pandas

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

0グッド

1クリップ

投稿2017/03/15 09:42

独学で python や pandas を使ってロト7を予想しています。
当選番号と予想番号の答え合わせをしたいと思っています
その当選と予想の的中する条件抽出で悩んでおります。

df1 は 当選番号のdf(第196回)

df1 N_1 N_2 N_3 N_4 N_5 N_6 N_7 0 06 08 10 12 16 21 28

df2 は 第196回を予想した数字のdf
行数は30〜50ほど

df2 N_1 N_2 N_3 N_4 N_5 N_6 N_7 0 04 10 14 21 28 30 35 1 04 10 14 21 28 30 33 2 04 10 14 21 28 30 34 3 04 10 14 21 28 32 35 4 04 10 14 21 28 32 33 5 04 10 14 21 28 32 34 6 04 10 14 21 28 31 35 7 04 10 14 21 28 31 33 8 04 10 14 21 28 31 34 9 04 10 14 21 27 30 35 : : : : : : : : 27 02 13 15 24 30 32 35 28 02 13 15 24 30 32 33 29 02 13 15 24 30 32 34 30 02 13 15 24 30 31 35 31 02 13 15 24 30 31 33 32 02 13 15 24 30 31 34

この場合10、21、28が的中しています
この df2 から 当たっている数字が残るdfを
抽出したいのですが...
どのように抽出すればいいか悩んでおります。
↓のような条件はためしたのですが、この場合column1つ分しか
抽出できず、、、

win_df = df2[(df2["N_1"] == df1["N_1"].values[0])| ((df2["N_2"] == df1["N_1"].values[0])| (df2["N_3"] == df1["N_1"].values[0])| (df2["N_4"] == df1["N_1"].values[0])| (df2["N_5"] == df1["N_1"].values[0])| (df2["N_6"] == df1["N_1"].values[0])| (df2["N_7"] == df1["N_1"].values[0]))]

抽出できれば 1個当たったdfや 3個当たったdfなど
dfの中身をみたいとおもっております。
どなたか わかる方 ご教授願います

まだまだ初心者なので、質問の内容が
わかりづらい部分もあるかもしれません。

使用しているのは
mac
Python 2.7.9
pandas

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

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

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

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

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

guest

回答1

0

ベストアンサー

set関数を使うと、論理積を使うことが出来ます。
予想した数字のアルゴリズムがわからないので、乱数で代用しています。

python

1import numpy as np 2import pandas as pd 3 4columns = ['N_1', 'N_2', 'N_3', 'N_4', 'N_5', 'N_6', 'N_7'] 5df1 = pd.DataFrame(['06', '08', '10', '12', '16', '21', '28']).T 6df1.columns = columns 7 8np.random.seed(1) 9df2 = pd.DataFrame(np.random.randint(1, 99,(30,7))) 10df2 = df2.applymap(lambda x: '{:02d}'.format(x)) 11df2.columns = columns 12 13df2.apply(lambda x: set(x) & set(df1.loc[0]), axis=1)

投稿2017/03/15 10:53

driller

総合スコア720

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

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

hiroway

2017/03/15 11:55

driller様  ご回答ありがとうございます! 試してみました!  df1やdf2は 元のデータを使ったので 教えていただいた df2.apply(lambda x: set(x) & set(df1.loc[0]), axis=1) この1行で抽出できるとは!感動です! set関数というものがあるのですね! こちらの関数も教えて頂きありがとうございます! 一昨日からいろいろ検索して探してましたが、こんな短時間で 解決していただくとは ほんと助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問