2015-11-18 32 views
0

有沒有辦法將pandas.apply與可變數量的多個列參數一起使用?例如,假設我有這樣的數據幀:有多個** Kwarg參數的熊貓應用功能

df = pd.DataFrame({'A':['a','b','c'], 
        'B':['a','b','c'], 
        'C':['a','b','c'], 
        'D':['a','b','c']}) 

我想寫串接列產生一個新列的函數 - 與此非常相似SO question。因此,兩列的例子是:

def dynamic_concat_2(df, one, two): 
    return df[one]+df[two] 

我使用的功能,像這樣

df['concat'] = df.apply(dynamic_concat2, axis=1, one='A',two='B') 

現在,我無法弄清楚難的是如何爲列的未知動態量做到這一點。有沒有一種方法來概括使用** kwargs的函數?所以它可能是1-n列連接?

附加上下文:這是動態計算行級別數據的一個較大問題的簡單示例。未知數量的列具有指定對數據庫的查詢的數據 - 將其提供給查詢並返回一個值。我寫了一些真正不靈活的非pythonic解決方案(想想循環遍歷每行數據),但沒有奏效。我希望使用一個df.apply可以python-ify的東西。

回答

1

如果我理解你的問題,在我看來,最簡單的解決方案將首先從數據框中選擇列,然後應用連接所有列的函數。在我看來,這也同樣動態,但更加清潔。

例如,使用上面的數據:

cols = ['A', 'B', 'C'] 
df['concat'] = df[cols].apply(''.join, axis=1) 

這樣

>>> df 

    A B C D concat 
0 a a a a aaa 
1 b b b b bbb 
2 c c c c ccc 
+0

這個作品,但真正找一個** kwargs這裏的解決方案,因爲這字符串連接是我實際的簡化問題。看到我的上下文note – AZhao

+0

@AZhao我不知道我明白'** kwargs'的優點只是索引到熊貓數據框中。如果你可以修改你的例子或者提供一個新的例子來說明爲什麼上述方法不起作用(爲什麼需要''kwargs'''),我很樂意提供幫助。 – jme

+0

夠公平的。我會在另一個線索中提出我的真實問題! – AZhao