gpt4 book ai didi

python - Pandas - 根据其他列的值从特定列中选择行值

转载 作者:行者123 更新时间:2023-12-03 18:39:31 26 4
gpt4 key购买 nike

这有点令人费解,但我只会显示我的数据
我构建了以下数据框:

      Mid_XYZ  Mid_YYY  Mid_ZZZ Select1 Select2
867 1019.11 1027.64 1022.68 XYZ YYY
873 1018.04 1027.58 1022.81 XYZ ZZZ
我想通过匹配列名的一部分,从基于 Select1Select2 字符串的列中选择值。在第一行,这将是 1019.111027.64 (列 Mid_XYZMid_YYY ) - 因为 Select1 有字符串 XYZSelect2 有字符串 YYY
其中,在第二行 1018.041022.81(列 Mid_XYZMid_ZZZ )
稍后,我计划将这些值的总和存储在新列中。 DataFrame 看起来像这样
      Mid_XYZ  Mid_YYY  Mid_ZZZ Select1 Select2 Sum
867 1019.11 1027.64 1022.68 XYZ YYY 2046.75
873 1018.04 1027.58 1022.81 XYZ ZZZ 2040.85
我可以将列名更改为精确匹配,但应该有一些正则表达式的解决方案?我知道 df.filter(regex='XYZ') ,但我怎么能按行做呢?

最佳答案

使用以下矢量化解决方案:

import numpy as np

# clean rows
clean = df.columns.str.replace('^Mid_', '', regex=True)

# find matching column indices
s1 = np.argmax(clean.values == df['Select1'].values[:, None], axis=1)
s2 = np.argmax(clean.values == df['Select2'].values[:, None], axis=1)

# index and sum
df['Sum'] = df.values[np.arange(len(s1)), s1] + df.values[np.arange(len(s2)), s2]

print(df)
输出
     Mid_XYZ  Mid_YYY  Mid_ZZZ Select1 Select2      Sum
867 1019.11 1027.64 1022.68 XYZ YYY 2046.75
873 1018.04 1027.58 1022.81 XYZ ZZZ 2040.85

关于python - Pandas - 根据其他列的值从特定列中选择行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65568003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com