亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python pandas 列過濾子字符串

Python pandas 列過濾子字符串

繁星coding 2023-06-27 17:30:53
我在 python3 中有一個使用 pandas 的數據框,其中有一列包含帶有日期的字符串。這是該列的子集ColA"2021-04-03""2021-04-08""2020-04-12""2020-04-08""2020-04-12"我想刪除兩次具有相同月份和日期的行,并保留最新年份的行。這就是我所期望的這個子集的結果ColA"2021-04-03""2021-04-08""2020-04-12"最后兩行已刪除,因為 2020-04-12 和 2020-04-08 已包含 2021 年的日期。我想用 apply 和 lambda 來做到這一點,但我的真實數據框有數百行和數十列,因此效率不高。有沒有更有效的方法來做到這一點?
查看完整描述

2 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

有幾種方法可以做到這一點。其中之一是提取年份,按年份排序,并刪除具有重復月日對的行。


# separate year and month-day pairs

df['year'] = df['ColA'].apply(lambda x: x[:4])

df['mo-day'] = df['ColA'].apply(lambda x: x[5:])

df.sort_values('year', inplace=True)

print(df)

這是分離和排序后的樣子:


         ColA  year mo-day

2  2020-04-12  2020  04-12

3  2020-04-08  2020  04-08

4  2020-04-12  2020  04-12

0  2021-04-03  2021  04-03

1  2021-04-08  2021  04-08

之后,我們可以簡單地刪除重復項并刪除附加列:


# drop duplicate month-day pairs

df.drop_duplicates('mo-day', keep='first', inplace=True)


# get rid of the two columns

df.drop(['year','mo-day'], axis=1, inplace=True)


# since we dropped duplicate, reset the index

df.reset_index(drop=True, inplace=True)

print(df)

最后結果:


         ColA

0  2020-04-12

1  2020-04-08

2  2021-04-03

這比將整個列轉換為日期時間并提取日期要快得多,因為您按原樣使用字符串。


查看完整回答
反對 回復 2023-06-27
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

我不確定您是否可以擺脫使用“應用”來提取日期的相關部分進行分組,但如果您首先將該列轉換為 pandas 日期時間類型,這會容易得多:


df = pd.DataFrame({'colA':

["2021-04-03",

"2021-04-08",

"2020-04-12",

"2020-04-08",

"2020-04-12"]})


df['colA'] = df.colA.apply(pd.to_datetime)

然后您可以按(日、月)分組并保留最高值,如下所示:


df.groupby(df.colA.apply(lambda x: (x.day, x.month))).max()


查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號