Pandas:创建重复的行,其中某些列已修改

时间:2017-02-22 16:42:26

标签: python pandas

我有这样的数据表。

A  B1  B2  B3      C
3   1   2   0  'foo'
5   1   4   5  'bar'
7   0   3   0  'baz'
8   0   0   0  'foo'

我想创建一个如下所示的新数据表:

   A   B     C
 1.5   1 'foo'
 1.5   2 'foo'
1.67   1 'bar'
1.67   4 'bar'
1.67   5 'bar'
   7   3 'baz'
   8   0 'foo'

根据以下规则:

  1. 如果B#列均不为零,请创建一个A未更改且B = 0的新行。
  2. 如果n >= 1列的B#为零,则创建n个新行,每个行的A更改为A/nB等于其中一个非零B#列。
  3. C孤身一人。我不关心新行的顺序。我处理的实际数据表是几十兆字节,所以如果可能的话,我更喜欢避免不必要的重复复制的解决方案。

1 个答案:

答案 0 :(得分:0)

这是一个完成这些工作的函数:

def transform(df):
    """ Iterate over rows of transformed dataframe. """

    for i, r in df.iterrows(): 
        # count number of B# that equal to 0
        n = sum(r[1:3] == 0)  

        if n == 0: 
            yield [r.A, 0, r.C]
        else: 
            yield [r.A/n, r.B1, r.C]
            yield [r.A/n, r.B2, r.C]
            yield [r.A/n, r.B3, r.C]

 new_df = pd.DataFrame(transform(df))