我有一个列表,让我们说,看起来像这样(我将其放入DF):
[
['john', '1', '1', '2016'],
['john', '1', '10', '2016'],
['sally', '3', '5', '2016'],
['sally', '4', '1', '2016']
]
columns
是['name', 'month', 'day', 'year']
我基本上想要输出一个新的DF,每个人只有最老的行。所以它应该包含两行,一行用于2016年1月1日的john,另一行用于2016年3月5日的sally。
我一直很难在DF内部进行这种选择,并希望有人能就如何完成上述工作提出一些建议。
答案 0 :(得分:4)
您可以按def wait_for_ajax
start = Time.now.tv_sec
stop = false
until stop do
active = page.evaluate_script('jQuery.active')
if active == 0
stop = true
elsif (Time.now.tv_sec - start) > Capybara.default_max_wait_time
stop = true
raise Exception.new("WaitForUrlError: Timed out waiting for url: #{url}")
end
end
end
对数据框进行排序,然后从每个year, month, day
获取第一行:
name
数据:
df.sort_values(by = ['year', 'month', 'day']).groupby('name').first()
# month day year
# name
# john 1 1 2016
#sally 3 5 2016
答案 1 :(得分:0)
选项1
使用pd.to_datetime
来解析['年','月'日']列。
groupby('name')
然后点first
df['date'] = pd.to_datetime(df[['year', 'month', 'day']])
df.sort_values(['name', 'date']).groupby('name').first()
选项2
相同pd.to_datetime
用法
groupby('name')
取idxmin
找到最小的日期。
df['date'] = pd.to_datetime(df[['year', 'month', 'day']])
df.ix[df.groupby('name').date.idxmin()]