Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于前一行合并数据帧中的行?_Python_Pandas - Fatal编程技术网

Python 如何基于前一行合并数据帧中的行?

Python 如何基于前一行合并数据帧中的行?,python,pandas,Python,Pandas,我有一个按顺序排列的数据帧,它表示随时间测量的两个事件-测量值是事件的开始和结束时间。它们应该按ABABAB顺序排列,但在某些情况下,我可能会有相同类型的连续事件(即ABABABABAB)。我正在寻找一种方法,用上一个事件标签检查每一行中的事件标签(a或B),如果它们相同,则以这样的方式合并行,以保持第一个事件的开始时间和第二个事件的结束时间。考虑以下事项: myDF = pd.DataFrame({"Event": ["A","B",

我有一个按顺序排列的数据帧,它表示随时间测量的两个事件-测量值是事件的开始和结束时间。它们应该按ABABAB顺序排列,但在某些情况下,我可能会有相同类型的连续事件(即ABABABABAB)。我正在寻找一种方法,用上一个事件标签检查每一行中的事件标签(a或B),如果它们相同,则以这样的方式合并行,以保持第一个事件的开始时间和第二个事件的结束时间。考虑以下事项:

myDF = pd.DataFrame({"Event": ["A","B","A","A","B","B","A"], 
                 "Start": [1,3,5,7,9,11,13], 
                 "End": [2,4,6,8,10,12,14]})
我现在拥有的

我需要的是

注:索引位置2-3处的两个A事件已合并为一个,原来位置4-5处的两个B事件也合并为一个

==============================
  Event      Start      End
==============================
    A          1         2
    B          3         4
    A          5         8
    B          9         12
    A          13        14
==============================
我最初想使用
groupby
,但我认为这不对,因为这将在整个数据帧上分组。同样,我也尝试过使用
iteritems
,但没有成功。对于缺少代码表示歉意,但我不知道如何解决这个问题。

您可以使用
first
last

g=df[“事件”].ne(df[“事件”].shift()).cumsum()
groupby(g,as_index=False).agg({
“事件”:“第一次”,
“开始”:“第一次”,
“结束”:“最后”
})
事件开始和结束
0 A 1 2
1 B 3 4
2 A 5 8
3 B 9 12
4 A 13 14
您可以与
first
last
一起使用

g=df[“事件”].ne(df[“事件”].shift()).cumsum()
groupby(g,as_index=False).agg({
“事件”:“第一次”,
“开始”:“第一次”,
“结束”:“最后”
})
事件开始和结束
0 A 1 2
1 B 3 4
2 A 5 8
3 B 9 12
4 A 13 14
另一种方法是

for i in range(1,myDF.shape[0]):
    if myDF['Event'][i] == myDF['Event'][i-1]:
        myDF.loc[i, ('Start')]= min(myDF['Start'][i],myDF['Start'][i-1])
        myDF.loc[i, ('End')]= max(myDF['End'][i],myDF['End'][i-1])
        myDF.drop([i-1],inplace=True)
另一种方法可以是

for i in range(1,myDF.shape[0]):
    if myDF['Event'][i] == myDF['Event'][i-1]:
        myDF.loc[i, ('Start')]= min(myDF['Start'][i],myDF['Start'][i-1])
        myDF.loc[i, ('End')]= max(myDF['End'][i],myDF['End'][i-1])
        myDF.drop([i-1],inplace=True)

@是的,你是对的。编辑了答案。感谢you@Ch3steR谢谢,这正是我需要的。根据我自己的理解,“first”和“last”是否理解为GroupBy.agg中的关键字?我习惯于将任何东西视为用户指定的字符串。不是关键字,他们只是
GroupByfirst()
GroupBy.last()
,熊猫维护了一个映射这些内容的字典,例如
{'mean':np.mean,'median':np.median,}
现在
.GroupBy(…).agg('mean'))
将调用
np.mean
在他们的github repo
pandas/core/base.py
中搜索更多信息,他们有
\u cython\u table
来维护这些短手@DC_Liv@HenryYik是的,你说得对。编辑了答案。感谢you@Ch3steR谢谢,这正是我需要的。根据我自己的理解,“first”和“last”是否理解为GroupBy.agg中的关键字?我习惯于将任何东西视为用户指定的字符串。不是关键字,他们只是
GroupByfirst()
GroupBy.last()
,熊猫维护了一个映射这些内容的字典,例如
{'mean':np.mean,'median':np.median,}
现在
.GroupBy(…).agg('mean'))
将调用
np.mean
在他们的github repo
pandas/core/base.py
中搜索更多信息,他们有
\u cython\u table
来维护这些短手@DC\u Liv