在组的最后一行创建一列,使用pandas将组的第一行放在第一列,第二行放在第二列…等等

uhry853o  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(331)

我有一个表,其中同一示例有多个条目,并且对该示例进行了多个调用。我试图为每个调用创建一个列,其中最后一个调用从第一个调用开始,每行都有一个列。下面是一个示例表:
7/7/20217/3/20217/3/2027/3/2027 7/3/2021 8 8:45a7 7/15/20217/15/15/20215/2027 7 7/15/20215/20215/20217/20217/15/20217/15/20217/15/20215/2027日期日期记录时间记录时间记录时间A7 7 7 7 7 7/7 7/15/15/20215/20215/20215/2021 9 9 9 9 9 7 7 7 7 7 7 7 7 7 7/2027 7 7 7 7 7 7 7 7 7 7 7 7 7/2027 7 7 7 7 7 7 7 7 7 7 7 7 7 7/2027 7 7 7 7 7 7 7 7 7 7 7 7 7 7/2027 7 7 7 7 7/2027 7 7 7 7 7 7 7 7 7 7 7 7 7 7/2027 7 7 7 7 7 7 7 7/2027 7 7 7 7 7 7/2027 7 7 7 7 7 7 7 7 7 7/20217/30/2021 16:41
我基本上是想让它看起来像这样:
2/2/2021 1 13:7 7 7 7/2/2021 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7/2021 7 7 7 7 7 7/2021 7 7 7 7 7 7 7 7 7/2021 7 7 7 7 7 7 7 7 7 7 7/2021 7 7 7 7 7 7 7 7 7 7 7 7 7/2021 7 7 7 7 7 7/2021 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7/2027 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7/2027 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7/2027 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7/2027 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 20217/30/202116:417/30/2021 11:127/30/2021 16:41
我试过轮班

df1['Call 1'] = df1.groupby(['Name', 'Discharge Date'])['RECORDED_TIME'].shift(-1)
df1['Call 2'] = df1.groupby(['Name', 'Discharge Date'])['RECORDED_TIME'].shift(-2)
df1['Call 3'] = df1.groupby(['Name', 'Discharge Date'])['RECORDED_TIME'].shift(-3)
df1['Call 4'] = df1.groupby(['Name', 'Discharge Date'])['RECORDED_TIME'].shift(-4)

这让我倒转了最后一排。我试着做了N件事,比如:

df1['Call 1'] = df1.groupby(['Name', 'Discharge Date'], as_index=False)['RECORDED_TIME'].nth(0)
df1['Call 2'] = df1.groupby(['Name', 'Discharge Date'], as_index=False)['RECORDED_TIME'].nth(1)
df1['Call 3'] = df1.groupby(['Name', 'Discharge Date'], as_index=False)['RECORDED_TIME'].nth(2)
df1['Call 4'] = df1.groupby(['Name', 'Discharge Date'], as_index=False)['RECORDED_TIME'].nth(3)

我试过改变位置号,但它们不会循环。因此,我似乎无法从该通话组中的第一个通话中接听电话1。为了重申这一点,我正在尝试在组的最后一次呼叫中创建一个列,将第一次呼叫放入列调用1,第二次呼叫放入列调用2,等等。一旦我可以将这些新列放入其中,就可以轻松地删除其他呼叫并将最后一次呼叫保持在记录时间内。

s71maibg

s71maibg1#

这项工作:

gb = df.groupby(["Name", "Discharge Date"])["Recorded Time"]
result = pd.concat([gb.last(), 
                    pd.DataFrame(gb.apply(lambda x: pd.Series(x.values)).unstack()).add_prefix("Call ")], 
                   axis=1)
42fyovps

42fyovps2#

试试这个:

gc = ['Name','Discharge Date']
rc = df.groupby(gc)['Recorded Time'].last()

(df.assign(cc = lambda x: x.groupby(gc).cumcount())
 .set_index(gc + ['cc'])['Recorded Time'].unstack()
 .rename(lambda x: 'Call {}'.format(x+1),axis=1).join(rc))

相关问题