2017-02-22 43 views
0

我有一個這樣的數據表。熊貓:創建重複的行,修改某些列

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. 如果B#n >= 1是零,則創建新n行,每行A改爲A/nB等於非零B#列之一。

C獨處。我不關心新行的順序。我正在處理的實際數據表是幾十兆字節,所以如果可能的話,我寧願避免不必要的重複複製的解決方案。

回答

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))