有没有办法使用地图功能或for循环进行融化?我需要用同一行代码融化5个数据框

时间:2019-05-11 06:45:36

标签: python pandas

我有6个数据框,称为 open_priceclosed_pricevolumeadj_open_pricehigh_pricelow_price

每个数据框都具有这样的值

This is before

This is my goal

我知道如何手动进行操作(无需循环或映射) 只需将pd.melt应用于每个数据框并保持合并结果:

open=pd.melt(open_price,
             value_vars=['GOOG','AMZN','APPL','FB','NFLX','SBUX','TSLA'],
             var_name='Firm', 
             value_name='Open',
             id_vars=['Firm'])

close=pd.melt(close_price,
              value_vars=['GOOG','AMZN','APPL','FB','NFLX','SBUX','TSLA'],
              var_name='Firm', 
              value_name='Close',
              id_vars=['Firm'])

openclose = pd.merge(open,close)

,依此类推。

有没有办法使这些重复性任务合而为一?

我还需要将value_name更改为其各自数据框的名称。

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试这样:

将数据框放入列表中,然后将pd.melt与map一起应用。

dfs = [df1, df2]

result=list(map(lambda df:pd.melt(...), dfs))

df_1, df_2 = result

因此,您的情况应该是:

dataframess = [open_price, low_price]


openn=pd.melt(df, value_vars=['GOOG','AMZN','APPL','FB','NFLX','SBUX','TSLA'],\
             var_name='Firm', value_name='Open',id_vars=['Firm'])

low=pd.melt(low_price, id_vars=['Date'], value_vars=['GOOG','AMZN','APPL','FB','NFLX','SBUX','TSLA'],\
             var_name='Firm', value_name='Low')

result=list(map(lambda x: pd.melt(low_price, id_vars=['Date'], value_vars=['GOOG','AMZN','APPL','FB','NFLX','SBUX','TSLA'],\
             var_name='Firm', value_name='x'),dataframess))

您不需要最后一行将map传递到列表中。 因为map返回了一个生成器,您可以通过该生成器进行循环。