我有一个数据框,其中包含一组分类列,1_A, 1_B, 1_C, 2_A, 2_b, 2_C..如所示。我希望创建一个字典列表,其中只有当_C列行具有值(形成字典键)在30和90之间时才形成/提取字典对,并且相应的字典值是_B列的值。
Index 1_A 1_B 1_C 2_A 2_B 2_C 3_A 3_B 3_C Class timestamp Cost
67 100 3.3 85.5 175 267 B 01-01-2021 00:00:00 1000
68 100 3.3 85 175 267 B 01-01-2021 00:00:00 1000
79 100 3.3 20 2.8 89 100 B 01-01-2021 00:00:00 1000
84 100 3.3 20 175 3 80 B 01-01-2021 00:00:00 100
85 100 3.3 20 175 3.1 70 B 01-01-2021 00:00:00 1000
86 100 3.3 19 175 4 60 B 01-01-2021 00:00:00 1000
99 100 3.3 19 175 267 B 01-01-2021 00:00:00 1000
因此,对于eg:上面eg df的字典列表将是[{85.5 : 3.3}, {85 : 3.3}, {89 : 2.8}, {80 : 3}, {70 : 3.1}, {60: 4}]
.
你能建议我如何能最好的解决这个吗?
我猜逻辑将通过遍历每个_C列来形成,如果条件匹配,从后面的1列(_B列)中获取值,并更新列表。并继续以这种方式遍历所有_C, _B列?
尝试:
cols = [col for col in df.columns if '_C' in col]
values = df[cols].apply(lambda x: x[(x>=30) & (x<=90)].
to_frame().
join(df[f"{x.name.split('_')[0]}_B"]).
set_index(x.name).to_dict()[f"{x.name.split('_')[0]}_B"]).values
values = {k: v for d in values for k, v in d.items()}
输出:
{85.5: 3.3, 85.0: 3.3, 89: 2.8, 80: 3.0, 70: 3.1, 60: 4.0}