pandasのDataFrameのapplyで複数列を返す。
pandasのDataFrameのapplyで複数列を返す場合のサンプルです。
apply で result_type='expand' を指定します。(バージョン0.23以上)
result_type{‘expand’, ‘reduce’, ‘broadcast’, None}, default None
これらは、axis = 1(列)の場合にのみ機能します。
「expand」:リストのような結果が列に変換されます。
「reduce」:リストのような結果を展開するのではなく、可能であればシリーズを返します。 これは「expand」の反対です。
「ブロードキャスト」:結果はDataFrameの元の形状にブロードキャストされ、元のインデックスと列が保持されます。
デフォルトの動作(なし)は、適用された関数の戻り値によって異なります。リストのような結果は、それらの一連の結果として返されます。 ただし、apply関数がSeriesを返す場合、これらは列に展開されます。
バージョン0.23.0の新機能。
テストデータ
import pandas as pd
dt={
"x" :[1100 , 1200 , 1300 ] ,
"y" :[2100 , 2200 , 2300 ] ,
}
df=pd.DataFrame(dt)
print(df.to_markdown())
import pandas as pd
dt={
"x" :[1100 , 1200 , 1300 ] ,
"y" :[2100 , 2200 , 2300 ] ,
}
df=pd.DataFrame(dt)
print(df.to_markdown())
x | y | |
---|---|---|
0 | 1100 | 2100 |
1 | 1200 | 2200 |
2 | 1300 | 2300 |
サンプルソース
def fnc(x):
return x["x"]+1,x["x"]+2
df[["a","b"]]=df.apply(lambda x:fnc(x),axis=1, result_type='expand')
print(df.to_markdown())
def fnc(x):
return x["x"]+1,x["x"]+2
df[["a","b"]]=df.apply(lambda x:fnc(x),axis=1, result_type='expand')
print(df.to_markdown())
x | y | a | b | |
---|---|---|---|---|
0 | 1100 | 2100 | 1101 | 1102 |
1 | 1200 | 2200 | 1201 | 1202 |
2 | 1300 | 2300 | 1301 | 1302 |
参考
Author And Source
この問題について(pandasのDataFrameのapplyで複数列を返す。), 我々は、より多くの情報をここで見つけました https://qiita.com/hirayama_yuuichi/items/997b9a07cb864d88d97c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .