我有以下两个数据帧:
df1型
ticker date return high_low turnover
CRM 2017-01-03 0.018040 0.026957 5.722346e+08
MSFT 2017-01-03 -0.003344 0.011428 1.295037e+09
CRM 2017-01-04 0.024198 0.032646 6.762756e+08
MSFT 2017-01-04 -0.002881 0.010142 1.329482e+09
CRM 2017-01-05 -0.000275 0.015580 3.417927e+08
df2型:
ticker date return high_low turnover
CRM 2017-01-03 0.018040 0.026957 5.722318e+08
MSFT 2017-01-03 -0.003344 0.011509 1.295037e+09
CRM 2017-01-04 0.024198 0.032575 6.761264e+08
MSFT 2017-01-04 -0.002881 0.010142 1.329480e+09
CRM 2017-01-05 -0.000275 0.015580 3.417930e+08
我有下面的代码。 但我想把最后四行简化成一行是可能的。在一行中执行三列的concat+groupby+apply。你知道吗
def get_min_absvalue(values):
return min(values, key = abs)
#simplify the following 4 lines in 1?
consolidated_return=(pd.concat((df1,df2),ignore_index=True,sort=False).groupby(['date','ticker'])['return'].apply(lambda x: get_min_absvalue(x)).reset_index())
consolidated_high_low=(pd.concat((df1,df2),ignore_index=True,sort=False).groupby(['date','ticker'])['high_low'].apply(lambda x: get_min_absvalue(x)).reset_index())
consolidated_turnover=(pd.concat((df1,df2),ignore_index=True,sort=False).groupby(['date','ticker'])['turnover'].apply(lambda x: get_min_absvalue(x)).reset_index())
merged = consolidated_return.merge(consolidated_high_low, on=['date', 'ticker']).merge(consolidated_turnover, on=['date', 'ticker'])
有可能吗?你知道吗
考虑一个简单的
min
聚合调用:对于真绝对值最小聚合:
来自
df1
&;df2
的列:list
数据帧列表:
df_list
的内容:pandas.core.series.Series
类型使用
concat
而不是merge
:df_list
与concat
结合起来最终数据帧:
比较使用新代码和原始代码创建的数据帧:
最终代码:
相关问题 更多 >
编程相关推荐