#python #pandas #numpy
Вопрос:
Я пытаюсь использовать np.where
, как показано ниже
inds_2 = np.where(df2['Transaction Amount']>5000 , 'High Amount' ,'Low Amount')
> df2['Transaction Amount']
13 414
15 630
16 444
17 444
18 779
...
1403 12
1404 12
1405 12
1406 12
1408 415
Когда я использую iloc
, я получаю эту ошибку:
> df2.iloc[inds_2]
invalid literal for int() with base 10: 'Low Amount'
Я попробовал функцию ниже, но она тоже не работала:
> df2['Transaction Amount'] = df2['Transaction Amount'].astype(float).astype(int)
Могу я получить какую-нибудь помощь?
Комментарии:
1. Читайте об этом . iloc в документации. Он основан на целочисленном расположении, а не на строке.
Ответ №1:
Вы, вероятно, захотите отфильтровать транзакции на df2
основе высоких и низких транзакций. Вы можете сделать что-то вроде этого:
is_high = np.where(df2['Transaction Amount']>5000 , True, False)
print("High transactions:", df2.loc[is_high])
print("Low transactions:", df2.loc[~is_high])
Но не забывайте, что это просто эквивалентно:
df2.loc[df2['Transaction Amount']>5000]
Проблема в .iloc
том, что он предназначен для индексации на основе целочисленного местоположения. Посмотри на это.
Правка 1:
df2['Transaction Amount'].apply(lambda value: 'High amount' if value > 5000 else 'Low amount')
Комментарии:
1. возможно, это частично решило проблему, но что, если я хочу, чтобы значения отображались как «низкое количество», «большое количество» по np.where и отображали все данные одновременно по iloc
2. Вы пытаетесь просто написать высокую и низкую сумму вместо суммы транзакции, а не цифры?
3. да, что делать, если я хочу написать высокую и низкую сумму вместо суммы транзакции
4. См. правку-1 в моем ответе. Я думаю, что это то, чего вы хотите, если вы не настаиваете на использовании numpy.