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

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

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

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

pandas

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

Q&A

解決済

2回答

5084閲覧

[Python]pandasで行数の異なるDataFrameの連結,欠損値埋めの仕方

zeze

総合スコア27

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2019/04/22 10:00

編集2019/04/22 10:01

前提・実現したいこと

前回の質問の続きとなります。→前回

発生している問題

スライシングで該当の行を抜き取り、連結したうえで欠損値を埋めたいのですが
下記のように連結後の0行目の欠損値を置換できません

お願いいたします。

該当のソースコード

>>> df1 frame tag 0 0 1m 1 1 2m 2 2 2m 3 3 2m 4 4 3m >>> df2 x y z 0 1.0 1.0 1.0 1 2.0 2.0 2.0 2 3.0 3.0 3.0 3 4.0 4.0 4.0 4 5.0 5.0 5.0 5 6.0 6.0 6.0 >>> df3 x y z 0 1.5 1.5 1.5 1 2.5 2.5 2.5 2 3.5 3.5 3.5 3 4.5 4.5 4.5 4 5.5 5.5 5.5 5 6.5 6.5 6.5 >>> df4 = pd.concat([df2, df1[0:1]], axis=1).fillna(method='ffill') >>> df4 x y z frame tag 0 1.0 1.0 1.0 0.0 1m 1 2.0 2.0 2.0 0.0 1m 2 3.0 3.0 3.0 0.0 1m 3 4.0 4.0 4.0 0.0 1m 4 5.0 5.0 5.0 0.0 1m 5 6.0 6.0 6.0 0.0 1m print("OK") >>> df4 = pd.concat([df3, df1[1:2]], axis=1).fillna(method='ffill') >>> df4 x y z frame tag 0 1.5 1.5 1.5 NaN NaN 1 2.5 2.5 2.5 1.0 2m 2 3.5 3.5 3.5 1.0 2m 3 4.5 4.5 4.5 1.0 2m 4 5.5 5.5 5.5 1.0 2m 5 6.5 6.5 6.5 1.0 2m print("NG")

動作環境

Windows10
Python(3.6.5)
pandas(0.24.2)

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

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

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

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

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

guest

回答2

0

すでに解決されておりますが。

今回のように df2の全ての行に、df1の特定の1行を追加する処理を行うのであれば、 DataFrame.concat() を使った後にfillna() をするよりも、DataFrame.merge() を使った方が簡単ではないでしょうか

Pyhon

1import pandas as pd 2df1 = pd.DataFrame([[i,f'{i+1}m'] for i in range(5)], columns=['frame','tag']) 3df2 = pd.DataFrame({'x':range(1,7),'y':range(1,7),'z':range(1,7)}, dtype='float') 4df3 = df2 + 0.5 5df4 = df3.assign(frame=1).merge(df1, on='frame') 6# x y z frame tag 7#0 1.5 1.5 1.5 1 2m 8#1 2.5 2.5 2.5 1 2m 9#2 3.5 3.5 3.5 1 2m 10#3 4.5 4.5 4.5 1 2m 11#4 5.5 5.5 5.5 1 2m 12#5 6.5 6.5 6.5 1 2m

投稿2019/04/22 11:43

magichan

総合スコア15898

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

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

zeze

2019/04/23 09:03 編集

ご回答ありがとうございます。 参考にさせていただきます!!
guest

0

自己解決

>>> df4 = pd.concat([df3, df1[1:2]], axis=1).fillna(method='ffill') >>> df4 x y z frame tag 0 1.5 1.5 1.5 NaN NaN 1 2.5 2.5 2.5 1.0 2m 2 3.5 3.5 3.5 1.0 2m 3 4.5 4.5 4.5 1.0 2m 4 5.5 5.5 5.5 1.0 2m 5 6.5 6.5 6.5 1.0 2m

この後に、後方方向に埋めるために

>>> df4.fillna(method='bfill') x y z frame tag 0 1.5 1.5 1.5 1.0 2m 1 2.5 2.5 2.5 1.0 2m 2 3.5 3.5 3.5 1.0 2m 3 4.5 4.5 4.5 1.0 2m 4 5.5 5.5 5.5 1.0 2m 5 6.5 6.5 6.5 1.0 2m

これでいけました。

投稿2019/04/22 10:25

zeze

総合スコア27

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問