python - 基于 Pandas 条件的行的最大值和最小值(取决于列名)

标签 python pandas dataframe

我有一个 df 如下

Astrt   Aend    Bstrt   Bend    Xstrt   Xend    Ystrt   Yend
25        27    15        16    11        12    40      42
50        51    45        46    23        25    35      36
14        15    21        20    8          9    2        3
11        11    45        49    46        47    12       13

在此 df 中,以 A 开头的列链接到以 X 开头的列,以 B 开头的列链接到以

我想要的是

  1. 确定具有“strt”的所有列中最大的一个,即 Astrt、Bstrt、Xstrt 和 Ystrt,并放入一个新列“Tsrt”
  2. 然后是新列“Tend”中相应的“结束”值。因此,例如,如果“Bstrt”是最大的,则“Bend”(是否最大无关紧要)进入“Tend”列
  3. 正如我所说,以 A 开头的列链接到以 X 开头的列,以 B 开头的列链接到以。所以 2 个新列 'Ustrt' 和 'Uend' 应该填充相应列的开始和结束值 例如,如果 'Xstrt' 最大,则 'Ustrt' 和 'Uend' 列将具有来自 'Astrt' 和 'Aend' 的值(无需分析,直接取值)。

所以基本上,我们需要找到具有“strt”的所有列的最大值,确定其名称并根据其关系复制值。

上面 df 的预期输出如下。

Astrt   Aend    Bstrt   Bend    Xstrt   Xend    Ystrt   Yend    Tstrt   Tend    Ustrt   Uend
25        27       15   16         11   12         40   42        40    42         15   16
50        51       45   46         23   25         35   36        50    51         23   25
14        15       21   20          8   9           2   3         21    20          2   3
11        11       45   49         46   47         12   13        46    47         11   11

希望您清楚我要做什么。 有人可以帮忙吗?谢谢。

最佳答案

使用filterlookupreplace 构造这些列:

df_strt = df.filter(regex='strt$')
df_end = df.filter(regex='end$')
s = df_strt.idxmax(1)
d = {"X":"A", "A":"X", "Y":"B", "B":"Y"}
df['Tstrt'] = df_strt.lookup(*zip(*s.items()))
df['Tend'] = df_end.lookup(*zip(*s.str.replace('strt', 'end').items()))
df['Ustrt'] = df_strt.lookup(*zip(*s.replace(d,regex=True).items()))
df['Uend'] = (df_end.lookup(*zip(*s.str.replace('strt', 'end')
                                       .replace(d,regex=True).items())))

Out[202]:
   Astrt  Aend  Bstrt  Bend  Xstrt  Xend  Ystrt  Yend  Tstrt  Tend  Ustrt  Uend
0     25    27     15    16     11    12     40    42     40    42     15    16
1     50    51     45    46     23    25     35    36     50    51     23    25
2     14    15     21    20      8     9      2     3     21    20      2     3
3     11    11     45    49     46    47     12    13     46    47     11    11

关于python - 基于 Pandas 条件的行的最大值和最小值(取决于列名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64003115/

相关文章:

python - 如何让 Windows 资源管理器以 Python 字符串形式返回文件路径?

python - 将不同维度的图像存储在 numpy 数组中

python - 为什么我的循环神经网络的损失为零?

python - 我们能否通过接受(或忽略)新功能使 ML 模型(pickle 文件)更加健壮?

python - 如何查看是否有评论

python - 在条件列上乘以两个 pandas 数据框的最佳方法

python - 如何在Python中使用groupby删除列表中的重复项?

python - 将数据框分组并根据条件选择其中一个单元格

python - 为列的上半部分和下半部分设置数学运算

python - pandas 如何计算列值加起来达到阈值的行数