簡體   English   中英

將函數應用於返回多行的熊貓數據框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM