[英]pandas – apply function to DataFrame row-wise, resulting in a new DataFrame of different dimensions
我希望能夠將一個函數應用於DataFrame
(逐行),以便它可以返回不一定具有與原始維度或索引相同的新DataFrame
。
假設我有一個DataFrame
, df
:
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
和一個函數foo()
:
>>> def foo(series):
... series['E'] = 'NEW_STUFF'
... series['F'] = 'MORE_NEW_STUFF'
... df = pd.DataFrame(series.drop('B')).transpose()
... return pd.concat([df,df], keys='qw')
...
這樣
>>> foo(df.iloc[0])
A C D E F
q 0 A0 C0 D0 NEW_STUFF MORE_NEW_STUFF
w 0 A0 C0 D0 NEW_STUFF MORE_NEW_STUFF
我想將foo()
應用於df
,從而導致新的DataFrame
,其中在每一行上運行foo()
的結果都被堆疊到單個DataFrame
,就像
A C D E F
q 0 A0 C0 D0 NEW_STUFF MORE_NEW_STUFF
w 0 A0 C0 D0 NEW_STUFF MORE_NEW_STUFF
q 1 A1 C1 D1 NEW_STUFF MORE_NEW_STUFF
w 1 A1 C1 D1 NEW_STUFF MORE_NEW_STUFF
q 2 A2 C2 D2 NEW_STUFF MORE_NEW_STUFF
w 2 A2 C2 D2 NEW_STUFF MORE_NEW_STUFF
q 3 A3 C3 D3 NEW_STUFF MORE_NEW_STUFF
w 3 A3 C3 D3 NEW_STUFF MORE_NEW_STUFF
但是,運行df.apply(foo, axis=1)
不會返回此值。 相反,我得到
>>> df.apply(foo, axis=1)
0 A C D E F
q 0...
1 A C D E F
q 1...
2 A C D E F
q 2...
3 A C D E F
q 3...
dtype: object
我需要在上面進行哪些修改才能獲得所需的結果?
試試看
pd.concat([foo(y) for _,y in df.iterrows()])
Out[64]:
A C D E F
q 0 A0 C0 D0 NEW_STUFF MORE_NEW_STUFF
w 0 A0 C0 D0 NEW_STUFF MORE_NEW_STUFF
q 1 A1 C1 D1 NEW_STUFF MORE_NEW_STUFF
w 1 A1 C1 D1 NEW_STUFF MORE_NEW_STUFF
q 2 A2 C2 D2 NEW_STUFF MORE_NEW_STUFF
w 2 A2 C2 D2 NEW_STUFF MORE_NEW_STUFF
q 3 A3 C3 D3 NEW_STUFF MORE_NEW_STUFF
w 3 A3 C3 D3 NEW_STUFF MORE_NEW_STUFF
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.