Python 检测数据帧中的第一个更改

Python 检测数据帧中的第一个更改,python,pandas,dataframe,Python,Pandas,Dataframe,我面临的问题是,我有一个每天保存变量V1状态的熊猫数据框。我只对变量何时改变其状态以及新状态的信息感兴趣 test_dataframe = pd.DataFrame() test_dataframe['V1'] = ['X','Y','X','X','Y','X','Y','X'] test_dataframe['Status'] = ['A','C','B','B','D','B','D','A'] test_dataframe['Date'] = [pd.to_datetime('2017-

我面临的问题是,我有一个每天保存变量V1状态的熊猫数据框。我只对变量何时改变其状态以及新状态的信息感兴趣

test_dataframe = pd.DataFrame()
test_dataframe['V1'] = ['X','Y','X','X','Y','X','Y','X']
test_dataframe['Status'] = ['A','C','B','B','D','B','D','A']
test_dataframe['Date'] = [pd.to_datetime('2017-1-1'),pd.to_datetime('2017-1-2'),pd.to_datetime('2017-1-3'),pd.to_datetime('2017-1-4'),pd.to_datetime('2017-1-5'),pd.to_datetime('2017-1-6'),pd.to_datetime('2017-1-7'),pd.to_datetime('2017-1-8')]
print(test_dataframe)
导致以下数据帧

  V1 Status       Date
0  X      A 2017-01-01
1  Y      C 2017-01-02
2  X      B 2017-01-03
3  X      B 2017-01-04
4  Y      D 2017-01-05
5  X      B 2017-01-06
6  Y      D 2017-01-07
7  X      A 2017-01-08
我感兴趣的是:变量何时改变其状态,新的状态是什么

结果应该是:

V1 Status Date
-----------------
X  A      date_1
X  B      date_3
X  A      date_8
Y  C      date_2
Y  D      date_5
有人能帮忙吗?
THX

您可以使用
groupby
+
apply
-

df = df.groupby('V1', group_keys=False)\
       .apply(lambda x: x[x.Status.ne(x.Status.shift())])\
       .reset_index(drop=True)

df

  V1 Status       Date
0  X      A 2017-01-01
1  X      B 2017-01-03
2  X      A 2017-01-08
3  Y      C 2017-01-02
4  Y      D 2017-01-05

x.Status.ne(x.Status.shift())
位将查找
状态发生变化的行

您可以将
状态
列分解,并检查
差异
是否为零

f = lambda s: pd.Series(s.factorize()[0], s.index)
mask = f(test_dataframe.Status).groupby(test_dataframe.V1).diff().ne(0)
test_dataframe[mask]

  V1 Status       Date
0  X      A 2017-01-01
1  Y      C 2017-01-02
2  X      B 2017-01-03
4  Y      D 2017-01-05
7  X      A 2017-01-08

欢迎回来:-)我会试着回答几个问题(-:时间晚了,一天中的这个时候事情进展很慢。别逼自己!我会想办法让它有趣的