python - Pandas Dataframe 的复杂子集

标签 python pandas dataframe

我有一个数据框,其中一列中有各种值。我想确保数据框中每个唯一列元素都有 3 个最新条目。

我有:

      Group      Date        Value
        A        10/1/2017    4.4
        A        8/3/2017     9.2
        A        5/3/2017     8.4
        A        4/4/2017     4.4
        B        12/1/2015    4.4
        B        8/3/2015     9.2
        B        5/4/2015     8.4
        B        4/5/2015     4.4

我想要:

      Group      Date        Value
        A        10/1/2017    4.4
        A        8/3/2017     9.2
        A        5/3/2017     8.4
        B        12/1/2015    4.4
        B        8/3/2015     9.2
        B        5/4/2015     8.4

日期是日期时间。我不知道如何在这篇文章中表达其他意思。

我可以通过以下代码得到它:

new_df = pd.DataFrame()
for group in df['Group'].unique():

    temp_df = df[df['Group'] == group]
    temp_df = temp_df[0:3]

    if new_df.empty:

       new_df = temp_df

    else:

       new_df.append(temp_df)

有没有更Pythonic的方法来做到这一点?

提前致谢。

最佳答案

以下怎么样:

df.sort_values(by='Date', ascending=False).groupby('Group').head(3)

在我的小测试数据集上,这会返回以下内容(我使用 head(2)):

    Group   Date
1   c   2050-01-01
8   a   2032-02-03
0   a   2030-01-01
9   c   2029-01-01
10  b   2018-01-01
2   b   2017-02-03

正如您所看到的,各个组的值不再很好地组合在一起。我们可以通过首先按“组”排序然后按“日期”排序来解决此问题:

df.sort_values(by=['Group', 'Date'], ascending=[True,False]).groupby('Group').head(3)


    Group   Date
8   a   2032-02-03
0   a   2030-01-01
10  b   2018-01-01
2   b   2017-02-03
1   c   2050-01-01
9   c   2029-01-01

关于python - Pandas Dataframe 的复杂子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52883238/

相关文章:

python - 在 Python 中使用 Selenium 提取特定类的链接

python - 覆盖 SQL Alchemy ORM 过滤条件

R:聚合数据框的列

python-3.x - 使用同一列中具有另一列中匹配值的值填充 Pandas DataFrame 中的空值

python - 如何在Python中使用pandas在现有Excel工作表中追加列

python - tensorflow GPU错误: InvalidArgumentError: Cannot assign a device for operation 'MatMul'

python - 为我的 SelectField 启用验证

python - Pandas 数据帧 : loop and calculate mean and std over increasing number of columns

python - Pandas DataFrame : replace all values in a column, 基于条件

python - python 运算符重载是如何工作的