目前還不清楚你想達到什麼樣的,但我懷疑你需要創建單獨的dataframes。
下面的示例顯示瞭如何獲取數據框,將其子集合到您感興趣的列,將函數foo
應用於其中一列,然後應用返回多個值的第二個函數bar
。
df = pd.DataFrame({
'first_name': ['john', 'nancy', 'jolly'],
'last_name': ['smith', 'drew', 'rogers'],
'A': [1, 4, 7],
'B': [2, 5, 8],
'C': [3, 6, 9]
})
>>> df
first_name last_name A B C
0 john smith 1 2 3
1 nancy drew 4 5 6
2 jolly rogers 7 8 9
def foo(first_name):
return 2 if first_name.startswith('j') else 1
def bar(first_name):
return (2, 0) if first_name.startswith('j') else (1, 3)
columns_of_interest = ['first_name', 'A']
df_new = pd.concat([
df[columns_of_interest].assign(x=df.first_name.apply(foo)),
df.first_name.apply(bar).apply(pd.Series)], axis=1)
>>> df_new
first_name A x 0 1
0 john 1 2 2 0
1 nancy 4 1 1 3
2 jolly 7 2 2 0
爲什麼你需要返回一個數據框,如果你只是在最後連接它們?在你的問題中沒有什麼解釋爲什麼這個「要求」是相關的。事實上,如果您正在考慮行而不是列,那麼您可能無效地處理數據。 – Alexander
...你試過'pd.DataFrame.apply'方法嗎?它似乎*完全*你想要的。 –
@亞歷山大我其實確實需要這個要求。 考慮這個炮製的例子:數據表中的每一行都是一個人的名字。要應用於每行的函數將採用該名稱,並且通過任何邏輯(引用外部對象/數據幀)將返回與該名稱關聯的5個數字特徵。現在我非常需要這個名稱和它的5個特徵,以DataFrame格式,即5行,2列:名稱|特徵 對於所有行也是如此。 –