Groupby больше, чем в Pandas очень медленно - PullRequest
0 голосов
/ 06 октября 2018

У меня есть таблица ниже в качестве кадра данных панд.Мне нужно подсчитать все Part Number, где Net Sales больше Recommended Price для данной детали.

Ввод: выше_мастер

  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 ]

0 голосов
/ 06 октября 2018

Сначала используйте логическое сравнение, используя gt (больше, чем), присвойте его столбцу count, затем groupby, используя Part Number с параметром 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 голосов
/ 06 октября 2018

Вот еще один способ использования панд Series value_counts

df['Part Number'][df['Recommended Price'] < df['Net Sales']].value_counts()
0 голосов
/ 06 октября 2018

Использование loc с size:

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

Part Number
MU1609    1
MU2146    3
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...