将多个列添加到多个数据框

时间:2017-01-01 15:14:44

标签: python loops pandas dataframe

我有许多小型数据框,其中包含给定股票的日期和股票价格。 Someone else向我展示了如何遍历它们,以便它们包含在名为 all_dfs 的列表中。因此,all_dfs[0]将是 Date IBM US equity 的数据框,all_dfs[1] Date MMM US Equity 等(示例如下所示)。数据框中的 Date 列始终相同,但库存名称全部不同,与该库存列关联的数字始终不同。因此,当您致电all_dfs[1]时,这是您会看到的数据框(即all_dfs[1].head()):

IDX       Date          MMM US equity    
0         1/3/2000      47.19    
1         1/4/2000      45.31    
2         1/5/2000      46.63    
3         1/6/2000      50.38

我想在每个数据帧中添加相同的附加列。所以我试图遍历它们并添加列。股票名称列中的数字是构成其他列的计算的基础。

还有更多列要添加,但我认为它们将以相同的方式循环,这是我要添加的列的示例:

Column 1 to add >>> df['P_CHG1D'] = df['Stock name #1'].pct_change(1) * 100

Column 2 to add >>> df['PCHG_SIG'] = P_CHG1D > 3

Column 3 to add>>> df['PCHG_SIG']= df['PCHG_SIG'].map({True:1,False:0})

这是我到目前为止的代码,但是它返回了all_dfs[i]的语法错误。

for i in range (len(df.columns)):
for all_dfs[i]: 
    df['P_CHG1D']  = df.loc[:,0].pct_change(1) * 100

所以我也有两个我无法弄清楚的问题

  1. 我不知道如何在循环中的每个数据帧中添加列。所以我必须做一些像all_dfs[i].['ADD COLUMN NAME'] = df['Stock Name 1'].pct_change(1) * 100

  2. 这样的事情
  3. 在= df['Stock Name 1']之后的第二部分,这是不断变化的(所以在这个例子中,它被称为 MMM US Equity ,但下次它将被称为第二个数据帧的列标题 - 所以它可能是 IBM US Equity )因为每个数据帧都有不同的名称所以我不知道如何在循环中正确调用它

  4. 我是python / pandas的新手,所以如果我想错了,请告诉我是否有更好的解决方案。

1 个答案:

答案 0 :(得分:0)

考虑遍历 alldfs 的长度,以通过索引引用循环中的每个元素。对于第一个新列,使用.ix运算符按列位置2(第三列)选择库存列:

for i in range(len(alldfs)):
    dfList[i].is_copy = False   # TURNS OFF SettingWithCopyWarning

    dfList[i]['P_CHG1D'] = dfList[i].ix[:, 2].pct_change(1) * 100
    dfList[i]['PCHG_SIG'] = dfList[i]['P_CHG1D'] > 3
    dfList[i]['PCHG_SIG_VAL'] = dfList[i]['PCHG_SIG'].map({True:1,False:0})