【发布时间】:2021-12-28 20:43:39
【问题描述】:
我有以下三个数据框:
df1 = pd.DataFrame(
{
"A_price": [10, 12, 15],
"B_price": [20, 19, 29],
"C_price": [23, 21, 4],
"D_price": [45, 47, 44],
},
index = ['01-01-2020', '01-02-2020', '01-03-2020']
)
df2 = pd.DataFrame(
{
"A_mid": [10, 12, 15],
"B_mid": [20, 19, 29],
"C_mid": [23, 21, 4],
"D_mid": [45, 47, 44],
},
index = ['01-01-2020', '01-02-2020', '01-03-2020']
)
df3 = pd.DataFrame(
{
"A_weight": [0.1, 0.2, 0.4],
"B_weight": [0.2, 0.5, 0.1],
"C_weight": [0.3, 0.2, 0.1],
"D_weight": [0.4, 0.1, 0.4],
},
index = ['01-01-2020', '01-02-2020', '01-03-2020']
)
我定义了以下函数:
def price_weight(df1, df3):
df_price_weight = pd.merge(df1, df3, left_index=True, right_index=True)
if 'close' in df_price_weight.columns:
df_price_weight.filter(regex=('close|weight'))
df_price_weight.columns = df_price_weight.columns.str.split('_', expand=True)
df_price_weight = df_price_weight.sort_index(axis=1)
elif 'price' in df_price_weight.columns:
df_price_weight.filter(regex=('price|weight'))
df_price_weight.columns = df_price_weight.columns.str.split('_', expand=True)
df_price_weight.rename(columns={'price':'close'}, inplace=True)
df_price_weight = df_price_weight.sort_index(axis=1)
else:
df_price_weight.filter(regex=('mid|weight'))
df_price_weight.columns = df_price_weight.columns.str.split('_', expand=True)
df_price_weight.rename(columns={'mid':'close'}, inplace=True)
df_price_weight = df_price_weight.sort_index(axis=1)
return df_price_weight
由于某种原因,当我调用 price_weight(df1, df3) 时,我没有得到正确的输出。我应该收到一个包含 ['close', 'weight'] 列的数据框,但我收到了 ['price', 'weight']。
如何成功定义一个包含多个 if 语句的函数以返回所需的输出?
更新:我正在尝试传递另一个函数
def wmedian(dtfrm):
df = dtfrm.unstack().sort_values('close')
return df.loc[df['weight'].cumsum() > 0.5, 'close'].iloc[0]
在哪里
dtfrm = price_weight(df1, df3)
wmedian 函数应该返回一个收盘价的数据框,但我收到“KeyError: 'close'”。
我应该在函数中更改什么?
谢谢。
【问题讨论】:
-
你从
df_price_weight.columns得到什么结果?当您查看该结果时,您是否希望if 'close' in df_price_weight.columns:满意?是吗?提示:如果你尝试'x' in ['xx']会发生什么?
标签: python pandas dataframe function if-statement