熊猫将子循环中的新列添加回主数据框

时间:2018-11-08 18:53:05

标签: python pandas loops

我有一个如下所示的数据框:

 ids    value   
  1      0.1
  1      0.2
  1      0.14   
  2      0.22
    ....

我试图遍历每个id并为每个id计算新列。

for id, row in df.groupby('ids'):
    x = row.loc[0, 'value']

    for i in range (len(row)):
        row.loc[i, 'new_col_1'] = i * x
        row.loc[i, 'new_col_2'] = i * x * 10

我的目标是将每个id的2个新列添加回原始数据帧,因此我的df如下所示:

 ids    value    new_col_1     new_col_2
  1      0.1       0              0
  1      0.2       0.2            2
  1      0.14      0.28           2.8
  2      0.22      0              0
     ....

1 个答案:

答案 0 :(得分:1)

cumcount

播放了一些Numpy广播。

  • cumcount为您带来for i in range(len(df))

    df.groupby('ids').cumcount()
    
    0    0
    1    1
    2    2
    3    0
    dtype: int64
    

c = df.groupby('ids').cumcount()
v = df.value

df.join(
    pd.DataFrame(
      (c.values * v.values)[:, None] * [1, 10],
      df.index,
  ).rename(columns=lambda x: f"new_col_{x + 1}")
)

   ids  value  new_col_1  new_col_2
0    1   0.10       0.00        0.0
1    1   0.20       0.20        2.0
2    1   0.14       0.28        2.8
3    2   0.22       0.00        0.0