Python 是否删除groupby中重复的行?
我试图在数据框中创建一个名为volume的新列。DF已经包括其他栏目,如market。我想做的是按价格和公司分组,然后得到它们的数量,并将其添加到名为volume的新列中。以下是我所拥有的:Python 是否删除groupby中重复的行?,python,pandas,Python,Pandas,我试图在数据框中创建一个名为volume的新列。DF已经包括其他栏目,如market。我想做的是按价格和公司分组,然后得到它们的数量,并将其添加到名为volume的新列中。以下是我所拥有的: df['volume'] = df.groupby(['price', 'company']).transform('count') 这确实创建了一个新列,但是,它给了我所有的行。我不需要所有的行。例如,在转换之前,我会得到4行,而在转换之后,我仍然得到4行,但有一个新列 market company
df['volume'] = df.groupby(['price', 'company']).transform('count')
这确实创建了一个新列,但是,它给了我所有的行。我不需要所有的行。例如,在转换之前,我会得到4行,而在转换之后,我仍然得到4行,但有一个新列
market company price volume
LA EK 206.0 2
LA SQ 206.0 1
LA EK 206.0 2
LA EK 36.0 3
LA EK 36.0 3
LA SQ 36.0 1
LA EK 36.0 3
我想删除重复的行。我是否可以使用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
只需使用列
['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
您的数据包含重复项,可能是因为您只包含了列的一个子集。您的数据中需要价格以外的其他信息(例如,两个不同的交易日可能以相同的价格结束,但您不会将这两个交易日的交易量相加)
假设给定时间戳、市场和公司的价格是唯一的,并且您首先在时间戳列(如果有)上排序(如果每个公司和市场只有一个价格,则不需要):
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