通过有选择地从相邻列中选取值作为字典键值对来创建字典列表,并循环访问 df 的列



我有一个数据框,其中包含一组分类列,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}

最新更新