如何在多个子集上循环,执行操作,并将结果带到python中的原始数据帧?

如何在多个子集上循环,执行操作,并将结果带到python中的原始数据帧?,python,pandas,subset,Python,Pandas,Subset,我有一个包含数百万行的数据框,以及大约100k个唯一ID号。我想根据唯一ID执行操作。现在,我根据唯一ID生成一个子集,并相应地执行一些操作。这个循环有效。但是如何有效地将子集组合成一个数据帧呢 也许有一种更有效的方法来执行每个唯一ID子集的操作 谢谢 for ID in np.unique(df_fin['ID']): ID_subset = df_fin.loc[df_fin['ID'] == ID] for i in ID_subset.index: if

我有一个包含数百万行的数据框,以及大约100k个唯一ID号。我想根据唯一ID执行操作。现在,我根据唯一ID生成一个子集,并相应地执行一些操作。这个循环有效。但是如何有效地将子集组合成一个数据帧呢

也许有一种更有效的方法来执行每个唯一ID子集的操作

谢谢

for ID in np.unique(df_fin['ID']):
    ID_subset = df_fin.loc[df_fin['ID'] == ID]

    for i in ID_subset.index:
        if ID_subset['date_diff'][i] > 0:
            for p in range(0,ID_subset['date_diff'][i]):
                if p == WIP:
                    sl.appendleft(ID_subset.return_bin[i-1])
                else:
                    sl.appendleft(0)

                lissa = list(sl)
                ID_subset.at[i,'list_stock'] = lissa

    frames = [ID_subset] #this does not work
    final_mod = pd.concat(frames) #this also does not work
这是有效的: 我还尝试了groupby.apply。请参阅下面的代码

def create_stocklist(x):
    x['date_diff'] = x['dates'] - x['dates'].shift()
    x['date_diff'] = x['date_diff'].fillna(0)
    x['date_diff'] = (x['date_diff'] / np.timedelta64(1, 'D')).astype(int)
    x['list_stock'] = x['list_stock'].astype(object)
    x['stock_new'] = x['stock_new'].astype(object)

    var_stock = DOS*[0]
    sl = deque([0],maxlen=DOS)

    for i in x.index:
        if x['date_diff'][i] > 0:
            for p in range(0,x['date_diff'][i]):
                if p == WIP:
                    sl.appendleft(x.return_bin[i-1])
                else:
                    sl.appendleft(0)

                lissa = list(sl)
                x.at[i,'list_stock'] = lissa
    return x

df_fin.groupby(by=['ID']).apply(create_stocklist)

一种方法可以是:

for g, _id in df_din.groupby(by=['ID']):
    # do stuff with g

g
是一个包含所有行的数据框,因此
df_fin['ID']==\u ID

您是否有机会查看熊猫?是否使用groupby.apply函数完成了此操作。谢谢@Pierluigi