如何在多个子集上循环,执行操作,并将结果带到python中的原始数据帧?
我有一个包含数百万行的数据框,以及大约100k个唯一ID号。我想根据唯一ID执行操作。现在,我根据唯一ID生成一个子集,并相应地执行一些操作。这个循环有效。但是如何有效地将子集组合成一个数据帧呢 也许有一种更有效的方法来执行每个唯一ID子集的操作 谢谢如何在多个子集上循环,执行操作,并将结果带到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
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