Ввод что-то вроде этого -
P1,OVR4447,01/15/2033,-25385.58
P2,OVR4447,01/15/2024,-24391.41
P3,OVR4447,01/15/2024,24215.21
P4,OVR4447,01/15/2033,25125.31
Я создал структуру данных, которая содержит отдельные поля для всех этих. Это называется Позиция.
class position
{
public string type;
public string strategy;
[FieldConverter(ConverterKind.Date, "MM/dd/yyyy")]
public DateTime AddedDate;
public float dv01;
}
Затем я нахожу все комбинации всех объектов из входных данных, которые выглядят как -
P1 -25385.58 1/15/2033 12:00:00 AM
P2 -24391.41 1/15/2024 12:00:00 AM
P3 24215.21 1/15/2024 12:00:00 AM
P4 25125.31 1/15/2033 12:00:00 AM
P1 -25385.58 1/15/2033 12:00:00 AM,P2 -24391.41 1/15/2024 12:00:00 AM
P1 -25385.58 1/15/2033 12:00:00 AM,P3 24215.21 1/15/2024 12:00:00 AM
P1 -25385.58 1/15/2033 12:00:00 AM,P4 25125.31 1/15/2033 12:00:00 AM
P2 -24391.41 1/15/2024 12:00:00 AM,P3 24215.21 1/15/2024 12:00:00 AM
P2 -24391.41 1/15/2024 12:00:00 AM,P4 25125.31 1/15/2033 12:00:00 AM
P3 24215.21 1/15/2024 12:00:00 AM,P4 25125.31 1/15/2033 12:00:00 AM
P1 -25385.58 1/15/2033 12:00:00 AM,P2 -24391.41 1/15/2024 12:00:00 AM,P3 24215.21 1/15/2024 12:00:00 AM
P1 -25385.58 1/15/2033 12:00:00 AM,P2 -24391.41 1/15/2024 12:00:00 AM,P4 25125.31 1/15/2033 12:00:00 AM
P1 -25385.58 1/15/2033 12:00:00 AM,P3 24215.21 1/15/2024 12:00:00 AM,P4 25125.31 1/15/2033 12:00:00 AM
P2 -24391.41 1/15/2024 12:00:00 AM,P3 24215.21 1/15/2024 12:00:00 AM,P4 25125.31 1/15/2033 12:00:00 AM
P1 -25385.58 1/15/2033 12:00:00 AM,P2 -24391.41 1/15/2024 12:00:00 AM,P3 24215.21 1/15/2024 12:00:00 AM,P4 25125.31 1/15/2033 12:00:00 AM
Я также создал отдельную матрицу для вычисления сумм всех 4-х полей ввода каждой отдельной строки в приведенном выше выводе.
Например,
P1 -25385.58 1/15/2033 12:00:00 AM,P2 -24391.41 1/15/2024 12:00:00 AM
будет хранить сумму (25385.58 + -24391.41)
и т. Д.
Затем я отсортировал все строки на основе сумм и пришел к этому (взяв только верхние 3/4 структуры.
Key = 340.426421271519, Value = 2
P2 -24391.41 1/15/2024 12:00:00 AM
P3 24215.21 1/15/2024 12:00:00 AM
Key = 510.651516323145, Value = 2
P1 -25385.58 1/15/2033 12:00:00 AM
P4 25125.31 1/15/2033 12:00:00 AM
Key = 644.600957023994, Value = 4
P1 -25385.58 1/15/2033 12:00:00 AM
P2 -24391.41 1/15/2024 12:00:00 AM
P3 24215.21 1/15/2024 12:00:00 AM
P4 25125.31 1/15/2033 12:00:00 AM
Key = 3073.72909353198, Value = 2
P2 -24391.41 1/15/2024 12:00:00 AM
P4 25125.31 1/15/2033 12:00:00 AM
Key = 3922.143619398, Value = 2
P1 -25385.58 1/15/2033 12:00:00 AM
P3 24215.21 1/15/2024 12:00:00 AM
Теперь моя главная цель - сгруппировать ВСЕ строки во входных данных и отобразить их пользователю.
Для этого примера, как мне сгруппировать
Key = 340.426421271519, Value = 2
P2 -24391.41 1/15/2024 12:00:00 AM
P3 24215.21 1/15/2024 12:00:00 AM
Key = 510.651516323145, Value = 2
P1 -25385.58 1/15/2033 12:00:00 AM
P4 25125.31 1/15/2033 12:00:00 AM
вместе и
Key = 644.600957023994, Value = 4
P1 -25385.58 1/15/2033 12:00:00 AM
P2 -24391.41 1/15/2024 12:00:00 AM
P3 24215.21 1/15/2024 12:00:00 AM
P4 25125.31 1/15/2033 12:00:00 AM
остается как есть (потому что он содержит все это) и
Key = 3073.72909353198, Value = 2
P2 -24391.41 1/15/2024 12:00:00 AM
P4 25125.31 1/15/2033 12:00:00 AM
Key = 3922.143619398, Value = 2
P1 -25385.58 1/15/2033 12:00:00 AM
P3 24215.21 1/15/2024 12:00:00 AM
вместе и отобразить это пользователю?
Я видел что-то подобное в другом вопросе, так что интересно, будет ли это работать?
L = [[v] + [i in k for i in df['Name'].values] for k, v in d.items()]
res_df = pd.DataFrame(L, columns=['Score'] + df['Name'].tolist())
res_df = res_df.iloc[np.argsort(res_df['Score'].abs())].astype(int)
print(res_df.head())
Score Person1 Person2 Person3 Person4 Person5 Person6 Person7
2 0 0 0 1 0 0 0 0
98 0 1 1 1 1 1 0 0
67 0 1 1 0 1 1 0 0
85 5 0 1 1 1 0 0 1
76 5 1 0 1 0 1 1 0
где вместо Person1, Person2 и так далее ... Я могу получить свои строки, а затем выписать все суммы и взять строки со всеми 1 и наименьшей суммой?