所以我有一个数据框,它具有后续行中具有相同id和活动的某些活动的开始和结束时间。偶尔会有一行没有结束我想放弃evtl。 (在此示例中为id 3& 5)。可以合并成对的行(具有id / act对:在不同时间的1 / 10,2 / 10和1/10),即可以丢弃第二行。我可以简单地通过移动一列来添加结束时间,但是我很难在没有遍历整个数据帧的情况下摆脱不必要的行。
line
答案 0 :(得分:0)
非常感谢您快速回复,但我实际上已经通过一个非常简单的解决方案解决了这个问题:
df = pd.DataFrame([[1,10,20],[1,10,25],[2,10,40],[2,10,41],[3,10,42],[1,10,45],[1,10,45],[5,10,50]], columns=['id','act','time'])
id act time
0 1 10 20
1 1 10 25
2 2 10 40
3 2 10 41
4 3 10 42
5 1 10 45
6 1 10 45
7 5 10 50
df["end"]=df["time"].shift(-1)
df["id 2"]=df["id"].shift(-1)
df["act 2"]=df["act"].shift(-1)
df.drop(df.index[len(df)-1],inplace=True)
id act time time 2 id 2 act 2
0 1 10 20 25.0 1.0 10.0
1 1 10 25 40.0 2.0 10.0
2 2 10 40 41.0 2.0 10.0
3 2 10 41 42.0 3.0 10.0
4 3 10 42 45.0 1.0 10.0
5 1 10 45 45.0 1.0 10.0
6 1 10 45 50.0 5.0 10.0
df=df.loc[(df["id"]==df["id 2"])== (df["act"]==df["act 2"])]
df.drop(columns=["id 2","act 2"],axis=0,inplace=True)
id act time end
0 1 10 20 25.0
2 2 10 40 41.0
5 1 10 45 45.0