我有一個這樣的df:
df = pd.DataFrame([[1000, 'Yellow'], [2100, 'Blue'], [3400, 'Purple'], [3416,'Grey'], [3420,'Purple'], [1100,'Yellow']], columns=['Time', 'Marker'])
df
Time Marker
0 1000 Yellow
1 2100 Blue
2 3400 Purple
3 3416 Grey
4 3420 Purple
5 1100 Yellow
目標: 1. 遍歷“標記”列。2. 對于每個具有連續重復值的單元格(但不一定相鄰;例如,“紫色”重復但不是在第一次出現后立即出現),測驗它們之間的間隔是否小于 1,000 毫秒(通過減去 '兩個實體的時間列)。如果差值小于 1,000 - 洗掉第二次出現的行。
我從這個開始,但我堅持如何繼續:
for val in df['Marker']:
df[~((df['Marker']==df['Marker'].shift())&(df['Marker'].isin(['180','181'])))]
在這個例子中,我們最終只會得到第一個“紫色”的立場,因為第二個實體發生得太快了:
Time Marker
0 1000 Yellow
1 2100 Blue
2 3400 Purple
3 3416 Grey
我很想聽聽建議。
uj5u.com熱心網友回復:
假設您要洗掉嚴格優于 100 的差異,請groupby在 Marker 上使用并計算diff. 如果低于 ( lt) 100,則保留該行:
df[~df.groupby('Marker')['Time'].diff().lt(100)]
輸出:
Time Marker
0 1000 Yellow
1 2100 Blue
2 3400 Purple
3 3416 Grey
5 1100 Yellow
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/434074.html
標籤:Python python-3.x 熊猫
下一篇:更有效地操作numpy陣列的方式
