Python / Pandas: разделить значения долларов в одном столбце на отдельные столбцы - PullRequest
0 голосов
/ 08 мая 2020

Я новичок в Python / Pandas, и я думаю, что проблема, которую я пытаюсь решить, очень проста, но я не могу понять решение.

Я загрузил CSV-файл, удаленные столбцы, которые мне не нужны, и отсортированные данные. Теперь я хочу создать новую таблицу в зависимости от того, попадает ли «Значение» котировки в определенный диапазон. Я успешно отсортировал некоторые значения здесь:

# Sums values between $0 and $10k
Q_Summ10 = Q_Summ_W[(Q_Summ_W['Value'] > 0.0) & (Q_Summ_W['Value'] <= 10000.0)]
print(Q_Summ10)
print(Q_Summ10['Value'].sum())

# Sum values between $10k and $20k
Q_Summ20 = Q_Summ_W[(Q_Summ_W['Value'] > 10000.0) & (Q_Summ_W['Value'] <= 20000.0)]
print(Q_Summ20)
print(Q_Summ20['Value'].sum())

Я хотел бы сделать это итеративно с приращениями по 10 тыс. Долларов и создать новый столбец / индекс для каждого приращения. Следующий код - это то, что я пробовал и с которым не удалось:

for i in Q_Summ_W['Value'](10000.0,5000000.0,10000.0):
         sep = pd.DataFrame[('Summ{}'.format(i)):[Q_Summ_W[Q_Summ_W['Value'] > (i - i) & 
               Q_Summ_W['Value'] <= i]]

Исследования говорят мне, что я должен использовать для этого словарь или последовательность, но я не уверен, как создать их с помощью al oop. Любая помощь приветствуется!

1 Ответ

0 голосов
/ 08 мая 2020

Это проще сделать, используя pd.cut, чтобы разделить фрейм данных на интервалы, а затем df.groupby, чтобы сгруппировать значения по интервалам. Затем просто используйте метод sum() над объектом groupby для суммирования всех значений в каждом интервале.

Вы не предоставили никакого примера, поэтому приведенный ниже код действует на Dataframe со столбцом Value, содержащим случайные значения от 0 до 1, которые я затем группирую по интервалам 0,1:

import pandas as pd
import numpy as np

np.random.seed(42)  # for reproductibility
df = df = pd.DataFrame({'Value': np.random.random(size=100)})
print(df)
# output:
#
#            Value
# 0   0.374540
# 1   0.950714
# 2   0.731994
# 3   0.598658
# 4   0.156019
# ..       ...
# 95  0.493796
# 96  0.522733
# 97  0.427541
# 98  0.025419
# 99  0.107891
#
# [100 rows x 1 columns]

grouped_df = df.groupby(pd.cut(df['Value'], np.arange(0, 1, 0.1))).sum()
print(grouped_df)
# output:
#
#                Value
# Value               
# (0.0, 0.1]  0.699045
# (0.1, 0.2]  2.372805
# (0.2, 0.3]  1.606776
# (0.3, 0.4]  4.057759
# (0.4, 0.5]  3.216896
# (0.5, 0.6]  5.521448
# (0.6, 0.7]  4.428124
# (0.7, 0.8]  8.954358
# (0.8, 0.9]  7.598556

Обратите внимание, что np.arange(0, 1, 0.1)) - это просто удобный способ определить массив интервалов размера исправлений, которые мы затем используем для сокращения наших dataframe - пользователем. в моем примере это массив:

array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])

Вам просто нужно изменить эту часть диапазона значений, которые вы хотите использовать в качестве интервалов, например (10000.0,5000000.0,10000.0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...