3 回答

TA貢獻1824條經(jīng)驗 獲得超6個贊
這是一個使用apply數(shù)據(jù)幀的示例,我正在調(diào)用它axis = 1。
注意區(qū)別在于,不是嘗試將兩個值傳遞給函數(shù)f,而是重寫函數(shù)以接受pandas Series對象,然后索引Series以獲取所需的值。
In [49]: df
Out[49]:
0 1
0 1.000000 0.000000
1 -0.494375 0.570994
2 1.000000 0.000000
3 1.876360 -0.229738
4 1.000000 0.000000
In [50]: def f(x):
....: return x[0] + x[1]
....:
In [51]: df.apply(f, axis=1) #passes a Series object, row-wise
Out[51]:
0 1.000000
1 0.076619
2 1.000000
3 1.646622
4 1.000000
根據(jù)您的使用情況,創(chuàng)建一個pandas group對象,然后apply在該組上使用有時會很有幫助。

TA貢獻1784條經(jīng)驗 獲得超9個贊
一個簡單的解決方案是
df['col_3'] = df[['col_1','col_2']].apply(lambda x: f(*x), axis=1)

TA貢獻1900條經(jīng)驗 獲得超5個贊
在熊貓中有一種干凈,單行的方式:
df['col_3'] = df.apply(lambda x: f(x.col_1, x.col_2), axis=1)
這允許f是具有多個輸入值的用戶定義函數(shù),并使用(安全)列名而不是(不安全)數(shù)字索引來訪問列。
數(shù)據(jù)示例(基于原始問題):
import pandas as pd
df = pd.DataFrame({'ID':['1', '2', '3'], 'col_1': [0, 2, 3], 'col_2':[1, 4, 5]})
mylist = ['a', 'b', 'c', 'd', 'e', 'f']
def get_sublist(sta,end):
return mylist[sta:end+1]
df['col_3'] = df.apply(lambda x: get_sublist(x.col_1, x.col_2), axis=1)
產(chǎn)量print(df):
ID col_1 col_2 col_3
0 1 0 1 [a, b]
1 2 2 4 [c, d, e]
2 3 3 5 [d, e, f]
添加回答
舉報