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

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

新規登録して質問してみよう
ただいま回答率
85.47%
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

pandas

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

2回答

2232閲覧

pandasのデータフレームについてapplyメソッド内で値を判定後、判定結果を列に代入してもNaNになる。

hirohir03146

総合スコア3

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

pandas

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2021/03/13 06:35

編集2021/03/13 06:36

データフレームについて、カテゴリ別に基準値を設けて、基準値以下なら"OK"、基準値を超えるなら"NG"を列に追加したです。
以下のようなコードで追加しようとしましたが、NaNとなります。
列を追加する方法をご教授いただけないでしょうか。

df2['結果'] = df2.loc['ファッション']['金額'].apply(lambda x : 'OK' if x <= 30000 else 'NG')

今回以下のような処理を行なっています。
①以下のようなCSVデータを読み込んでデータフレームを作成しています。

df = pd.read_csv('/input.csv', encoding = "shift-jis") df['日付'] = pd.to_datetime(df['日付'],format='%Y/%m/%d')

dfの中身
||項目|金額|カテゴリ大|カテゴリ小|
|:--|:--:|--:|
|日付||||
|2019-11-02|ユニクロ|10000|ファッション|NaN
|2019-11-16|電気|12000|固定費|光熱費
|・・・|・・・|・・・|・・・|・・・
|2021-03-10|スーパー|5000|食費|食材費

②上記のdfについて、カテゴリ大毎に月の合計金額を算出しています。

df2 = df.groupby(['カテゴリ大']).resample('M').sum()

df2の中身

金額
カテゴリ大日付
ファッション2019-11-3011000
2019-12-3140000
2020-01-3120000
・・・・・・・・・
食費2019-11-3030000
2019-12-3150000
2020-01-3145000

上記②のdfにファッションなら、30000円以下なら"OK"、それ以外なら"NG"を列に追加したいのですが、NaNとなります。

df2['結果'] = df2.loc['ファッション']['金額'].apply(lambda x : 'OK' if x <= 30000 else 'NG')

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

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

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

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

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

kirara0048

2021/03/13 16:59

df2に列を追加しようとした場合、カテゴリ大がファッションじゃないときはOKとNGをどのように判定するのか指示しないといけないのではないでしょうか。
guest

回答2

0

ベストアンサー

欲しいのはこういうものでしょうか。

python

1>>> df_limit = pd.DataFrame({'カテゴリ大':['ファッション', '固定費', '食費'], '予算':[30000, 50000, 40000]}) 2>>> print(df) 3 項目 金額 カテゴリ大 カテゴリ小 4日付 52019-11-02 ユニクロ 10000 ファッション NaN 62019-11-03 丸井 25000 ファッション NaN 72019-11-16 電気 12000 固定費 光熱費 82019-11-15 スーパー 8000 食費 食材費 92019-12-01 スーパー 5000 食費 食材費 10>>> df2 = df.groupby(['カテゴリ大']).resample('M').sum().reset_index() 11>>> print(df2) 12 カテゴリ大 日付 金額 130 ファッション 2019-11-30 35000 141 固定費 2019-11-30 12000 152 食費 2019-11-30 8000 163 食費 2019-12-31 5000 17>>> df3 = pd.merge(df2, df_limit, on='カテゴリ大').set_index('日付') 18>>> df3['結果'] = df3.apply(lambda row: 'OK' if row['金額'] <= row['予算'] else 'NG', axis=1) 19>>> df3.drop(['予算'], axis=1, inplace=True) 20>>> print(df3) 21 カテゴリ大 金額 結果 22日付 232019-11-30 ファッション 35000 NG 242019-11-30 固定費 12000 OK 252019-11-30 食費 8000 OK 262019-12-31 食費 5000 OK

投稿2021/03/13 09:10

ppaul

総合スコア24666

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

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

hirohir03146

2021/03/13 13:53 編集

ご回答ありがとうございます。 mergeメソッド知らなかったです。 勉強になります。 ご教授いただいた形式の他に、私が記載しましたdf2にそのまま結果列を追加する方法はありますでしょうか? こんな感じのdfにしたいです。             金額 結果 カテゴリ大   日付 ファッション 2019-11-30   10000 OK         2019-12-31 40000 NG         2020-01-31 20000 OK ・・・ ・・・ ・・・ 食費      2019-11-30 30000 OK         2019-12-31 50000 NG         2020-01-31 45000 NG
ppaul

2021/03/13 14:05

あの後に、 df4 = df3.reset_index().set_index(['カテゴリ大', '日付']) を行ってください。
hirohir03146

2021/03/15 11:39

上記回答いただいた内容で期待する結果になりました! ありがとうございます。
guest

0

Python

1df2.loc['ファッション','結果']=list(df2.loc['ファッション','金額'].apply(lambda x : 'OK' if x<=30000 else 'NG'))

とか

投稿2021/03/13 13:59

modieu

総合スコア282

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

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

hirohir03146

2021/03/15 11:39

locメソッド内で複数項目指定は知りませんでした。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問