我试图在groupby
中DataFrame
的几列中,仅保留特定列更改值的行。
这是数据集的样本
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']
没有返回我期望的结果。
答案 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