Pandas中按大于某值分组非常缓慢

3
我有一个如下的pandas数据框。我需要计算给定零件中,所有“零件编号”在“净销售额”大于“建议价格”的情况下的数量。
输入:above_master
  Short Number  Net Sales    Part Number   Recommended Price
0       MU2146     413.25      MU2146      385.949155
1       MU2146     433.12      MU2146      385.949155
2       MU2146     498.12      MU2146      385.949155
3       MU1609     146.07      MU1609      149.138978
4       MU1609     246.17      MU1609      149.138978

所需输出

Part Number count
MU2146       3 
MU1609       1

使用的代码

for number in range(len(above_master.index)):
    cal_s1 = above_master[above_master['Net Sales'] > above_master.iloc[number]['Recommended Price'] ].groupby('Part Number')['Recommended Price'].count()
    cal_s2 = cal_s1.to_frame().reset_index()
    cal_s3 = cal_s2.loc[cal_s2['Part Number'] == above_master.iloc[number]['Part Number']]
    cal_s4 = cal_s4.append(cal_s3, ignore_index=True)

虽然这个功能可以正常运行,但是执行时间非常长。

3个回答

4

使用 locsize

df.loc[df['Recommended Price'].lt(df['Net Sales'])].groupby('Part Number').size()

Part Number
MU1609    1
MU2146    3
dtype: int64

2

首先使用逻辑比较,使用gt(大于)将其赋值给count列,然后使用Part Number作为参数使用groupby分组,将as_index=False。然后在其上访问count总和:

df['count'] = df['Net Sales'].gt(df['Recommended Price'])
df.groupby(['Part Number'],as_index=False)['count'].sum()

  Part Number  count
0      MU1609    1.0
1      MU2146    3.0

0

这里有另一种使用pandas Series value_counts的方法

df['Part Number'][df['Recommended Price'] < df['Net Sales']].value_counts()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接