DataFrame组当每个组都有差异时

时间:2019-10-29 01:04:34

标签: pandas dataframe pandas-groupby

我试图在groupbyDataFrame的几列中,仅保留特定列更改值的行。

这是数据集的样本

Id  Type    Size    StoredAt
107  1       20    2019-08-01
107  1       20    2019-08-02
107  1       20    2019-07-31
107  1       20    2019-07-30
107  3       20    2019-07-29
108  1       20    2019-08-01
108  1       20    2019-08-02
108  3       20    2019-07-31

我试图做的是groupby,所以我只有两行显示类型从1变为3的时间。这就是我希望DataFrame的样子。

Id  Type    Size    StoredAt
107  1       20    2019-08-01
107  3       20    2019-07-29
108  1       20    2019-08-01
108  3       20    2019-07-31

到目前为止我所拥有的一切

dataFrame.groupby(['Id', 'Type', 'Size'])['Id', 'Type', 'Size', 'StoredAt']

没有返回我期望的结果。

2 个答案:

答案 0 :(得分:1)

似乎您只是在该组中保留第一个1或3的示例。在这种情况下,您可以使用以下命令提供所需的输出:

df.groupby(['Id', 'Type']).first().reset_index()

这假定您的数据框在“ StoredAt”列上排序。如果不是,则需要事先进行排序。

另一种选择是使用drop_duplicates仅使用列的子集,在这种情况下,它们应该是唯一的组合(Id和Type)。这将是:

df.drop_duplicates(subset=['Id', 'Type'])

答案 1 :(得分:1)

我认为drop_duplicates为您服务

df.drop_duplicates(['Id','Type'])
Out[256]: 
    Id  Type  Size    StoredAt
0  107     1    20  2019-08-01
4  107     3    20  2019-07-29
5  108     1    20  2019-08-01
7  108     3    20  2019-07-31