如何根据列名的最后3个字母对数据框中的列进行平均。我正在尝试创建一个新列,该列将为我提供所有'出价的平均值。在我的数据框中。
我的数据框如下所示:
JPM_bid, JPM_ask, Socgen_bid, Socgen_ask, UBS_bid, UBS_ask ....so forth
0 1.01556 1.01557 1.01552 1.01559 1.01555 1.01558
现在我正在做这样的计算:
df['JPM_spread'] = df['JPM_ask'].astype(float) - df['JPM_ask'].astype(float)
df['JPM_midpoint'] = (df['JPM_ask'].astype(float) + df['JPM_ask'].astype(float))/2
df['AVG_bid'] = ""
df['AVG_ask'] = ""
df['JPM_bid_depth'] = ""
...so forth
感谢您的帮助!
答案 0 :(得分:1)
首先获取名称中带有'bid'的所有列名称。
columns_with_bid = [column for column in df.columns if '_bid' in column]
过滤数据帧并迭代行。
df['bid_mean'] = list(row[1].mean() for row in df.filter(columns_with_bid).iterrows())
编辑:首先是错误解释的问题,以计算所有出价值的均值,而不仅仅是行。
答案 1 :(得分:1)
IIUC您需要使用列名称中包含bid
的列对数据框进行子集化并计算平均值。您可以使用str.contain
对列进行子集,使用loc
查找列的值,并为行轴获取mean
:
df.loc[:, df.columns.str.contains('bid')].mean(axis=1)
使用您的部分数据框:
In [57]: df
Out[57]:
JPM_bid, JPM_ask, Socgen_bid, Socgen_ask, UBS_bid, UBS_ask
0 1.01556 1.01557 1.01552 1.01559 1.01555 1.01558
In [58]: df.loc[:, df.columns.str.contains('bid')].mean(axis=1)
Out[58]:
0 1.015543
dtype: float64
修改强>
要排除0
,您可以将df
与0进行比较,然后使用mean
。如果您为此类数据框附加代码或示例,但没有数据如下,则会更好:
df_subset = df.loc[:, df.columns.str.contains('bid')]
df_subset[df_subset != 0].mean(axis=1)