亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pandas Dataframe:對于給定的行,嘗試根據對另一列中值的查找來分配特定列中的值

Pandas Dataframe:對于給定的行,嘗試根據對另一列中值的查找來分配特定列中的值

鴻蒙傳說 2021-08-24 18:04:38
基本上對于給定的行 i,我試圖根據 i 在另一列“本地最大字符串”中的值將 i 在列“Adj”中的值分配給某個值。基本上,需要在 DataFrame 的另一列“日期字符串”中搜索“本地最大字符串”中第 i 行的值,然后在包含該值的行 q 中將其值放在“調整關閉”列中第 i 行的“Adj”列的值。對不起,如果這很難理解。下面的 for 循環完成了我想做的事情,但我認為在 Pandas 中應該有更好的方法來做到這一點。我嘗試使用 apply 和 lambda 函數,但它說不可能進行賦值,而且我不確定我的做法是否正確。for 循環也需要很長時間才能完成。這是代碼:for x in range(0, len(df.index)):     df['Adj'][x] = df.loc[df['Date String'] == df['Local Max String'][x]]['Adj Close']這是 DF 的圖片,可以更好地理解我的意思。Adj 列中的值將查找與 Local Max String 中的 Date 相對應的 Adj Close 值。import numpy as npimport pandas as pdpd.core.common.is_list_like = pd.api.types.is_list_likefrom pandas_datareader import data as pdrimport matplotlib.pyplot as pltimport datetimeimport fix_yahoo_finance as yfyf.pdr_override() # <== that's all it takes :-)# Dates for datastart_date = datetime.datetime(2017,11,1)end_date = datetime.datetime(2018,11,1)df = pdr.get_data_yahoo('SPY', start=start_date, end=end_date)df.data = df['Adj Close']df['Most Recent Local Max'] = np.nandf['Date'] = df.indexlocal_maxes = list(df[(df.data.shift(1) < df.data) & (df.data.shift(-1) < df.data)].index)local_maxes.append(df['Date'][0] - datetime.timedelta(days=1))def nearest(items, pivot):    return min([d for d in items if d< pivot], key=lambda x: abs(x - pivot))df['Most Recent Local Max'] = df['Date'].apply(lambda x: min([d for d in local_maxes if d < x], key=lambda y: abs(y - x)) )df['Local Max String'] = df['Most Recent Local Max'].apply(lambda x: str(x))df['Date String'] = df['Date'].apply(lambda x: str(x))df.loc[df['Local Max String'] == str(df['Date'][0] - datetime.timedelta(days=1)), 'Local Max String'] = str(df['Date'][0])df['Adj'] = np.nan謝謝!
查看完整描述

2 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

這個解決方案仍然有一個 for,但它減少了從df.shape[1]to的迭代量df['Local Max String'].nunique(),所以它可能足夠快:

for a_local_max in df['Local Max String'].unique():
    df.loc[df['Date String'] == a_local_max, 'Adj'] = df.loc[df['Local Max String'] == a_local_max, 'Adj Close'].iloc[0]



查看完整回答
反對 回復 2021-08-24
  • 2 回答
  • 0 關注
  • 390 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號