熊猫:按列值删除准重复

时间:2016-09-19 22:09:27

标签: python pandas

我有一个列表,让我们说,看起来像这样(我将其放入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内部进行这种选择,并希望有人能就如何完成上述工作提出一些建议。

2 个答案:

答案 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()

enter image description here

选项2
相同pd.to_datetime用法 groupby('name')idxmin找到最小的日期。

df['date'] = pd.to_datetime(df[['year', 'month', 'day']])
df.ix[df.groupby('name').date.idxmin()]

enter image description here