Python:如何选择有条件的列?

问题描述 投票:1回答:1

我有一个如下数据框:

df
    id          d1         d2          d3         a1    a2       a3
0   474     0.000243    0.000243    0.001395    bank    bank    atm
1   964     0.000239    0.000239    0.000899    bank    bank    bank
2   4823    0.000472    0.000472    0.000834    fuel    fuel    fuel
3   7225    0.002818    0.002818    0.023900    bank    bank    fuel
4   7747    0.001036    0.001036    0.001415    dentist dentist bank

我想在d1d2d3以及相应的a1a2a3之间选择最小值。

df
    id      d          a
0  474  0.000243     bank
1  964  0.000239     bank
2 4823  0.000472     fuel
3 7225  0.002818     bank
4 7747  0.001036     dentist
python pandas
1个回答
0
投票

如果d的列数相同,而a和数字的列数相同,则可以相互映射:

df1 = df.filter(regex='d\d+')
df2 = df.filter(regex='a\d+')

pos = df1.idxmin(axis=1).map(dict(zip(df1.columns, df2.columns)))

df = df[['id']].assign(d = df1.min(axis=1), a = df.lookup(df.index, pos))
print (df)
     id         d        a
0   474  0.000243     bank
1   964  0.000239     bank
2  4823  0.000472     fuel
3  7225  0.002818     bank
4  7747  0.001036  dentist

0
投票

您可以在此处使用pd.wide_to_long来获取long格式的数据帧,并指定pd.wide_to_long作为存根名称。然后gruopby [d,a]ididxmin上的索引:

idxmin
© www.soinside.com 2019 - 2024. All rights reserved.