Python:用多个if语句定义函数并返回输出



我有以下三个数据帧:

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(时,我没有得到正确的输出。我应该收到一个列为["重量","重量"]的数据帧,但我收到的是["价格","体重"]。

如何使用多个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:"关闭";。

我应该在函数中更改什么?

谢谢。

条件'price' in df_price_weight.columns永远不会为True,因为确切的字符串'price'不是列的名称。

相反,我建议:

any(('price' in column_name) for column_name in df_price_weight.columns)

最新更新