[英]How to update multiple dataframe column cells using function return values
我在这里的上一个问题中有一个后续问题如何使用 function 返回值更新 dataframe 单元格
我有以下 dataframe 称为 df1,
country ticker price exchange dateupdated
0 US MSFT 105.32 Nasdaq 05-May-2019
1 US AAPL
2 GERMANY NSU.DE 10.42 XETRA 06-May-2019
3 SG D05.SI
4 AUS WOW.AX
我有一个名为 data_get 的 function,看起来像这样。 它从股票代码列中获取股票代码,例如“MSFT”,并返回一个列表。
def data_get(ticker):
listofdata = somefunction
return listofdata
listofdata = data_get('AAPL')
listofdata 是包含 price、exchange 和 dateupdated 的字符串列表。
listofdata = ['150.22', 'Nasdaq', '05-May-2020']
function 必须到 go 在线查找数据,因此每次运行需要几秒钟。
我只想在没有价格的单元格上使用这个 function,(价格单元格是空的)。
因此,function 将仅用于此 dataframe 的第 1、3 和 4 行,并更新其中的价格、交换和日期更新值,使其看起来像这样。
country ticker price exchange dateupdated
0 US MSFT 105.32 Nasdaq 05-May-2019
1 US AAPL 150.22 Nasdaq 05-May-2020
2 GERMANY NSU.DE 10.42 XETRA 06-May-2019
3 SG D05.SI 23.44 SGX 04-May-2020
4 AUS WOW.AX 12.33 ASX 04-May-2020
总而言之,我该怎么做;
仅将 data_get function 应用于价格为空的行(1、3、4),
使用股票代码列字符串 (AAPL, D05.SI, WOW.AX) 作为 data_get function 的输入,
使用来自 data_get function 的列表 output 并更新价格、交换和日期更新列?
如果我可以将字符串转换为价格列的浮点数和 dateupdated 列的日期,那也是一个好处。
在值为nan
的地方进行apply
df.loc[df.prices.isnull(), ['price','exchange','dateupdated']] =
df.loc[df.prices.isnull(), 'ticker'].apply(data_get)
我是这样做的,记住你要返回一个列表,所以要单独修改更新数据点,
df.loc[df.Price].isnull(),['Price','Exchange','Update_date']] = pd.DataFrame(df.loc[df.Price.isnull(),'Ticker'].apply(data_get).to_dict()).transpose().rename(columns={0:'Price',1:'Exchange',2:'Update_date'})
此单行将直接采用 dataframe 并根据您的函数的返回类型,将列表元素添加到 dataframe 中的相应列
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.