是否删除groupby中的重复行?

2024-03-28 14:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试在数据帧中创建一个新的卷。DF已经由market等其他专栏组成。我想做的是按价格和公司分组,然后计算出它们的数量并将其添加到一个名为volume的新列中。以下是我所拥有的:

df['volume'] = df.groupby(['price', 'company']).transform('count')

这确实创建了一个新列,但是它给了我所有的行。我不需要所有的行。例如,在转换之前,我将得到4行,而在转换之后,我仍然得到4行,但是有一个新的列。在

^{pr2}$

我想删除重复的行。对于groupby,是否有一个查询只显示如下行:

market  company   price    volume
LA      EK        206.0     2
LA      SQ        206.0     1
LA      SQ        36.0      1
LA      EK        36.0      3

Tags: 数据df数量sq公司价格marketprice
2条回答

您的数据包含重复项,可能是因为您只包含列的一个子集。除了价格,你还需要其他数据(例如,两个不同的交易日可以以相同的价格成交,但你不能从这两个交易日中合计成交量)。在

假设价格对于给定的时间戳、市场和公司是唯一的,并且您首先对时间戳列进行排序(如果有)(如果每个公司和市场只有一个价格,则不需要):

df = pd.DataFrame({
    'company': ['EK', 'SQ', 'EK', 'EK', 'EK', 'SQ', 'EK'],
    'date': ['2018-08-13'] * 3 + ['2018-08-14'] * 4,
    'market': ['LA'] * 7,
    'price': [206] * 3 + [36] * 4})

>>> (df.groupby(['market', 'date', 'company'])['price']
     .agg({'price': 'last', 'volume': 'count'}[['price', 'volume']]
     .reset_index()

  market        date company  price  volume
0     LA  2018-08-13      EK    206       2
1     LA  2018-08-13      SQ    206       1
2     LA  2018-08-14      EK     36       3
3     LA  2018-08-14      SQ     36       1

只需使用drop_duplicates['market', 'company', 'price']

>>> df.drop_duplicates(['market', 'company', 'price'])
  market company  price  volume
0     LA      EK  206.0       2
1     LA      SQ  206.0       1
3     LA      EK   36.0       3
5     LA      SQ   36.0       1

相关问题 更多 >