如果>拆分值,除以,为列添加值 - Python / Pandas

时间:2016-12-14 19:17:34

标签: python-3.x pandas

import pandas as pd

df = pd.DataFrame([['Dog', 10, 6], ['Cat', 7 ,5]], columns=('Name','Amount','Day'))

Name  Amount Day
Dog    10    6
Cat    7     5

我想让DataFrame看起来如下:

Name  Amount Day
Dog1   6      6
Dog2   2.5    7
Dog3   1.5    8
Cat    7      5
First step: For any Amount > 8, split into 3 different rows, with new name of 'Name1', 'Name2','Name3'  
Second step:   
For Dog1, 60% of Amount, Day = Day.  
For Dog2, 25% of Amount, Day = Day + 1.  
For Dog3, 15% of Amount, Day = Day + 2.

Keep Cat the same because Cat Amount < 8

有什么想法吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

df = pd.DataFrame([['Dog', 10, 6], ['Cat', 7 ,5]], columns=('Name','Amount','Day'))

template = pd.DataFrame([
        ['1', .6, 0],
        ['2', .25, 1],
        ['3', .15, 2]
    ], columns=df.columns)

def apply_template(r, t):
    t = t.copy()
    t['Name'] = t['Name'].radd(r['Name'])
    t['Amount'] *= r['Amount']
    t['Day'] += r['Day']
    return t

pd.concat([apply_template(r, template) for _, r in df.query('Amount > 8').iterrows()],
          ignore_index=True).append(df.query('Amount <= 8'), ignore_index=True)

enter image description here