对于以下问题,我有一个 sort 好的解决方案,我想知道是否有更好的方法来处理以下类型的数据集,
我有一个约有15万行的小型数据集,其中有3个我要处理的基本行:
ID Status Week
1 base 1
1 over 2
1 base 3
1 over 4
1 over 5
1 under 6
计算over
的最终出现次数最有效的方法是什么?
基本上,对于上述数据集,我会说ID == 1
在Status
over
的位置上排在第4
周的最后两周,{{ 1}}和4
。
目前,我的方法是按5
和df
对我的ID
进行排序,然后Week
来获得上和下的最后一次出现并求和几周。
我感到有点傻,因为我确定这是一个简单的问题。.
目标数据集
groupby.tail()
原始DataFrame:
ID Duration of Last-Over, Start-Week, End-Week
1, 2, 4, 5
答案 0 :(得分:1)
下面的代码分两个步骤进行操作:
last = df[df.Status == 'over'][::-1][0:1].index
before_last = df[df.Status == 'over'][::-1][1:2].index
diff = df.iloc[last,3].values - df.iloc[before_last,3].values +1
ID = df.iloc[last,0]
new_df = pd.DataFrame({'ID': {0: ID.values[0]},
'Duration of Last-Over': {0: diff[0]},
'Start-Week': {0: df.iloc[before_last]['Week'].values[0]},
'End-Week': {0: df.iloc[last]['Week'].values[0]}})
产生此输出:
编辑:也许更简单:
仅获取“ over”的最后两次出现并对其进行处理。
df_aux = df[df.Status == 'over'].tail(2)
new_df = pd.DataFrame({'ID': {0: df_aux.iloc[1,0]},
'Duration of Last-Over': {0: df_aux.iloc[1,3] - df_aux.iloc[0,3] +1},
'Start-Week': {0: df_aux.iloc[0,3]},
'End-Week': {0: df_aux.iloc[1,3]}})