在熊猫数据框中添加差异行

时间:2020-11-02 08:33:11

标签: python pandas pandas-groupby

我想知道是否有人可以帮助我设计熊猫风格。我正在尝试对熊猫中的数据组进行操作,如以下示例所示。


import pandas as pd

df = pd.DataFrame({
    'idprod': [1, 1, 1, 1, 2, 2, 2],
    'optn': [1, 2, 3, 4, 1, 2, 3],
    'keep': ['a', 'a', 'a', 'a', 6, 6, 6],
    'bla': [7, 6, 5, 4, 0, 9, 8],
    'val': [500, 850, 1100, 1150, 1500, 2500, 4500]})

print(df)


def addtrf(g):
    g.set_index('optn', inplace=True)
    d = g.loc[3, 'val'] - g.loc[1, 'val']
    try: 
         d2 = g.loc[4, 'val'] - g.loc[1, 'val']
    except:
        d2=0
    g.reset_index(inplace=True)

    n = g.loc[g.optn == 3, :]
    n['val'] = d
    n['optn'] = 'diff1'
    del n['bla']
    g = g.append(n)

    n = g.loc[g.optn == 4, :]
    n['val'] = d2
    n['optn'] = 'diff2'
    del n['bla']
    g = g.append(n)

    #print(g)

    return (g)


dfn = df.groupby('idprod').apply(addtrf)
dfn=dfn.drop(columns='idprod')
dfn=dfn.reset_index()
dfn = dfn.drop(columns='level_1')

print(dfn)

因此,这实际上做了应做的事情,但是,我认为这不是一种很好的方法。您能帮我简化一下吗? 我不想使用循环。我还研究了使用.diff()的方法,但我可能需要做的不仅仅是减号,还需要保留一些列(保留),而删除其他列(bla)。因此类似于此答案下面的https://stackoverflow.com/users/8081945/babz问题:https://stackoverflow.com/a/57378481/13878458

任何帮助,不胜感激! PS:这对我的数据集来说非常慢,而且我还必须手动删除从reset_index中获取的level_1列

0 个答案:

没有答案
相关问题