[解決済み] pandasのapply関数で行のインデックスを取得する
2022-05-01 21:38:50
質問
ある行のインデックスにアクセスしようとしています。
DataFrame
をPandasで作成しました。私はこのようなものを持っています。
df = pandas.DataFrame([[1,2,3],[4,5,6]], columns=['a','b','c'])
>>> df
a b c
0 1 2 3
1 4 5 6
そして、指定された行の要素にアクセスする関数を定義します。
def rowFunc(row):
return row['a'] + row['b'] * row['c']
こんな風に適用できるんです。
df['d'] = df.apply(rowFunc, axis=1)
>>> df
a b c d
0 1 2 3 7
1 4 5 6 34
すげえええええええええええええええええええええええええ では、インデックスを関数に組み込む場合はどうすればいいのでしょうか?
この関数内の任意の行のインデックスを
DataFrame
を追加する前に
d
となります。
Index([u'a', u'b', u'c', u'd'], dtype='object')
しかし、私は0と1が欲しいのです。
row.index
.
インデックスを格納するテーブルに一時的なカラムを作ればいいのは分かっているのですが、行オブジェクトのどこかに格納されているのではと思います。
どのように解決するのですか?
この場合、インデックスにアクセスするために
name
属性で指定します。
In [182]:
df = pd.DataFrame([[1,2,3],[4,5,6]], columns=['a','b','c'])
def rowFunc(row):
return row['a'] + row['b'] * row['c']
def rowIndex(row):
return row.name
df['d'] = df.apply(rowFunc, axis=1)
df['rowIndex'] = df.apply(rowIndex, axis=1)
df
Out[182]:
a b c d rowIndex
0 1 2 3 7 0
1 4 5 6 34 1
もし、本当にこのようなことをしようとしているのであれば、以下の方法が有効であり、より高速であることに注意してください。
In [198]:
df['d'] = df['a'] + df['b'] * df['c']
df
Out[198]:
a b c d
0 1 2 3 7
1 4 5 6 34
In [199]:
%timeit df['a'] + df['b'] * df['c']
%timeit df.apply(rowIndex, axis=1)
10000 loops, best of 3: 163 µs per loop
1000 loops, best of 3: 286 µs per loop
EDIT
3年以上経ってからこの質問を見ると、そうすればいいんじゃないでしょうか。
In[15]:
df['d'],df['rowIndex'] = df['a'] + df['b'] * df['c'], df.index
df
Out[15]:
a b c d rowIndex
0 1 2 3 7 0
1 4 5 6 34 1
が、これほど些細なことではないと仮定すると、どんなものであれ、あなたの
rowFunc
が本当にやっていることは、ベクトル化された関数を使うことであり、それをdfインデックスに対して使うことです。
In[16]:
df['newCol'] = df['a'] + df['b'] + df['c'] + df.index
df
Out[16]:
a b c d rowIndex newCol
0 1 2 3 7 0 6
1 4 5 6 34 1 16
関連
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] インスタンスのクラス名を取得する?
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] 一行ずつ追加してPandas Dataframeを作成する
-
[解決済み] PandasでDataFrameの行を列の値に基づいて削除する
-
[解決済み] pandas DataFrameの特定のセルに対して、インデックスを使用して値を設定する
-
[解決済み] Pandasのmap、applymap、applyメソッドの違い
-
[解決済み] pandas series/dataframeの行を整数インデックスで選択する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない