有效地仅合并数据帧中的某些行

时间:2018-06-02 16:07:26

标签: python pandas

所以我有一个数据框,它具有后续行中具有相同id和活动的某些活动的开始和结束时间。偶尔会有一行没有结束我想放弃evtl。 (在此示例中为id 3& 5)。可以合并成对的行(具有id / act对:在不同时间的1 / 10,2 / 10和1/10),即可以丢弃第二行。我可以简单地通过移动一列来添加结束时间,但是我很难在没有遍历整个数据帧的情况下摆脱不必要的行。

line

1 个答案:

答案 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