我有这样的数据
df = pd.DataFrame({'ID': [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2],
'DATE': ['1/1/2015','1/2/2015', '1/3/2015','1/4/2015','1/5/2015','1/6/2015','1/7/2015','1/8/2015',
'1/9/2016','1/2/2015','1/3/2015','1/4/2015','1/5/2015','1/6/2015','1/7/2015'],
'CD': ['A','A','A','A','B','B','A','A','C','A','A','A','A','A','A']})
我想做的是按ID和CD分组,并获得每个更改的开始和停止更改。我尝试使用groupby和agg函数,但它将所有A分组在一起,即使它们需要分开,因为在2个A之间有B。
df1 = df.groupby(['ID','CD'])
df1 = df1.agg(
Start_Date = ('Date',np.min),
End_Date=('Date', np.min)
).reset_index()
我得到的是:
我希望有人能帮助我得到我需要的结果。我正在寻找的是:
1条答案
按热度按时间f87krz0w1#
使
grouper
用于分组grouper
:然后对
grouper
使用groupby输出:
更改列名并使用reset_index等来获得所需的输出
结果