![](/img/trans.png)
[英]pandas apply function that returns multiple values to rows in pandas dataframe
[英]Apply function to pandas dataframe that returns multiple rows
我想將一個函數應用於將某些行分成兩部分的pandas DataFrame。 因此,例如,我可能將其作為輸入:
df = pd.DataFrame([{'one': 3, 'two': 'a'}, {'one': 5, 'two': 'b,c'}], index=['i1', 'i2'])
one two
i1 3 a
i2 5 b,c
我想要這樣的輸出:
one two
i1 3 a
i2_0 5 b
i2_1 5 c
我的希望是,我可以只在數據幀上使用apply(),調用一個函數,該函數返回一個具有1行或更多行的數據幀,然后將其合並在一起。 但是,這似乎根本不起作用。 這是一個測試案例,其中我只是試圖復制每一行:
dfa = df.apply(lambda s: pd.DataFrame([s.to_dict(), s.to_dict()]), axis=1)
one two
i1 one two
i2 one two
因此,如果我返回一個DataFrame,則該DataFrame的列名似乎成為行的內容。 這顯然不是我想要的。
這里還有一個問題是使用.groupby()
解決的,但是我不認為這適用於我的情況,因為我實際上並不希望按任何東西分組。
正確的方法是什么?
您有一個混亂的數據庫(逗號分隔的字符串,應該在其中有單獨的列)。 我們首先解決此問題:
df2 = pd.concat([df['one'], pd.DataFrame(df.two.str.split(',').tolist(), index=df.index)], axis=1)
這給了我們更整潔的東西
In[126]: df2
Out[126]:
one 0 1
i1 3 a None
i2 5 b c
現在,我們可以做
In[125]: df2.set_index('one').unstack().dropna()
Out[125]:
one
0 3 a
5 b
1 5 c
調整索引(如果需要)很簡單,作為練習留給讀者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.