【发布时间】:2018-09-17 10:50:03
【问题描述】:
我有一个包含 3 列的 pandas 数据框,其中:
- 类别 dtype - 字符串
- 日期数据类型 - 日期时间
-
值 dtype - 浮点数
df = pd.DataFrame() df['category'] = ['a', 'b', 'b', 'b', 'c', 'a', 'b', 'c', 'c', 'a'] df['date'] = ['2018-01-01', '2018-01-01', '2018-01-03', '2018-01-05', '2018-01-01', '2018-01-02', '2018-01-06', '2018-01-03', '2018-01-04','2018-01-01'] df['values'] = [1, 2, -1.5, 2.3, 5, -0.7, -5.2, -5.2, 1, -1.1] df
我想筛选出每个类别具有接近该日期的正值和负值(差异最小)的行。
所以,本质上是这样的输出:
df = pd.DataFrame()
df['category'] = ['a', 'a','b', 'b', 'c', 'c']
df['date'] = ['2018-01-01', '2018-01-01', '2018-01-01', '2018-01-03', '2018-01-01', '2018-01-03']
df['values'] = [1, -1.1, 2, -1.5, 5, -5.2]
df
我查看了关于 SO (Identifying closest value in a column for each filter using Pandas, How do I find the closest values in a Pandas series to an input number?) 的类似查询
第一个使用idxmin,它返回第一次出现,而不是最接近的值。
第二个链接是关于作为输入的特定值 - 我认为纯 np.argsort 不适用于我的情况。
我可以想象使用复杂的 if 语句网络来执行此操作,但是,我不确定使用 pandas 最有效的方法是什么。
任何指导将不胜感激。
【问题讨论】:
-
欢迎来到 StackOverflow。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。
-
谢谢@jezrael,我已经更新了我的查询。