我有一个带有3列的pandas DataFrame,其中包含PERSON_ID,MOVING_DATE和PLACE,如下所示:
df = pandas.DataFrame(
[[1,datetime.datetime(2018, 1, 1), 'New York'],
[1, datetime.datetime(2018, 1, 20), 'Rio de Janeiro'],
[1, datetime.datetime(2018, 2, 13), 'London'],
[2, datetime.datetime(2017, 6, 12), 'Seatle'],
[2, datetime.datetime(2016, 10, 10), 'New Mexico'],
[3, datetime.datetime(2017, 9, 19), 'Sao Paulo'],
[3, datetime.datetime(2015, 12, 11), 'Bangladesh']]],
columns=['PERSON ID', 'MOVING DATE', 'PLACE']
)
PERSON ID MOVING DATE PLACE
0 1 2018-01-01 New York
1 1 2018-01-20 Rio de Janeiro
2 1 2018-02-13 London
3 2 2017-06-12 Seatle
4 2 2016-10-10 New Mexico
5 3 2017-09-19 Sao Paulo
6 3 2015-12-11 Bangladesh
我想根据此人的上次移动日期(MOVEMENT_DATE)找到该人所在的地方。
是否可以通过 groupby 方法获得结果?
到目前为止,我已经尝试过:
df = df.sort_values(['PERSON ID', 'MOVING DATE'])
df.groupby(['PERSON ID', 'MOVING DATE']).agg(
{'MOVING DATE': max, 'PLACE': 'last'}
)
但是没有成功。 任何帮助将不胜感激。
预先感谢
河南
答案 0 :(得分:8)
使用DataFrame.groupby
和Grouper.last
的单线:
df.sort_values('MOVING DATE').groupby('PERSON ID').last()
输出:
MOVING DATE PLACE
PERSON ID
1 2018-02-13 London
2 2017-06-12 Seatle
3 2017-09-19 Sao Paulo
答案 1 :(得分:3)
<div class="navbar">
<div class="nav-links">
<a class="active" href="#home">Home</a>
<a herf="#about">About </a>
<a herf="#patientinfo"> Patient Information </a>
<div class="dropdown">
<button class = "dropbutton">Select Hospital
</button>
<div class= "dropdown-content">
<a href="#">Hospital</a>
<a href="#">Hospital</a>
<a href="#">Hospital</a>
<a href="#">Hospital</a>
</div>
</div>
</div>
<div class="search">
<form action="/action_page.php"> <!--backend -->
<input class="search-input" type="text" name="search" placeholder="Search">
<button class="search-button" type="submit">Submit</button>
</form>
<!--search bar -->
</div>
</div>
在这里是过大的,这是sort
的时间复杂性,当您可以使用O(nlogn)
和loc
来做到这一点时:
idxmax
df.loc[df.groupby('PERSON ID')['MOVING DATE'].idxmax()]
答案 2 :(得分:1)
要添加到@Yuca和提供的答案,您还可以按照添加.last()的相同方式利用pandas lib中提供的.max()函数。
更多:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.max.html