Группирование набора данных в две группы с минимальной разницей в выбранных переменных - PullRequest
0 голосов
/ 28 января 2019

У меня есть набор данных с несколькими переменными. Я хочу разбить набор данных на две группы, и я хочу, чтобы разница в этих двух группах была как можно меньше.Предположим, у меня есть переменная price, я хочу, чтобы у двух последних групп была минимальная разница в их общей цене.Количество записей в каждой группе не так критично.Я хочу, чтобы последние две группы имели минимальную разницу в общих значениях выбранных переменных.Решение предпочтительно на питоне.

Пример данных:

Значение ID V1 V2 V3 V4 V5

1 $ 31 350,00 14,33% 732 120 23,6% 26%

2$ 9 240,00 14,33% 120 30,4% 34%

3 $ 12 257,00 6,45% 797 36 1,4% 4%

Поэтому я хочу разделить этот набор данных на две группы таким образом, чтобы группы имели минимальную разницу в общем количествезначение, среднее v1, v2, v3, v4, v5

1 Ответ

0 голосов
/ 29 января 2019

Я бы решил эту проблему, сначала отсортировав столбец с ценами ('Value') и рассчитав максимальную разницу в отсортированных данных.Затем разделите данные там.

Пример:

df = pd.DataFrame({'ID': [1,2,3,4,5,6],
                   'Value': [31350, 9240, 500, 1000, 200, 28000]})

# indices corresponding to sorted data
ix_sorted = df['Value'].argsort()

# get the differences with .diff() and the index corresponding to max difference with .idxmax()
ix_max = df['Value'][ix_sorted].diff().idxmax() - 1 

#split, using .iloc
df1, df2 = df.iloc[ix_sorted[:ix_max]], df.iloc[ix_sorted[ix_max:]] 

df1

>>   ID  Value
4   5    200
2   3    500
3   4   1000
1   2   9240

df2
>>  ID  Value
5   6  28000
0   1  31350
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...