【发布时间】:2023-02-21 23:46:40
【问题描述】:
我有以下数据库结构:
| Column A | Vote1 | Vote2 | Size1 | Size2 |
|---|---|---|---|---|
| Item1 | 2 | -1 | 2.5 | 2.1 |
| Item2 | -3 | 3 | 2.2 | 3.3 |
我需要通过 Vote * Size 之间的乘积来排序 db,但我需要在 Vote1 和 Vote2 之间选择较大的一个,与 Size1 和 Size2 相同。
更大(投票 1,投票 2)* 更大(尺寸 1,尺寸 2)
我无法理解如何使用熊猫。
【问题讨论】:
我有以下数据库结构:
| Column A | Vote1 | Vote2 | Size1 | Size2 |
|---|---|---|---|---|
| Item1 | 2 | -1 | 2.5 | 2.1 |
| Item2 | -3 | 3 | 2.2 | 3.3 |
我需要通过 Vote * Size 之间的乘积来排序 db,但我需要在 Vote1 和 Vote2 之间选择较大的一个,与 Size1 和 Size2 相同。
更大(投票 1,投票 2)* 更大(尺寸 1,尺寸 2)
我无法理解如何使用熊猫。
【问题讨论】:
对所有带有Vote的列使用DataFrame.filter,获取Size列的最大值和相同的方法,最后多个系列:
df['new'] = df.filter(like='Vote').max(axis=1).mul(df.filter(like='Size').max(axis=1))
或者:
df['new'] = np.maximum(df['Vote1'], df['Vote2']) * np.maximum(df['Size1'], df['Size2'])
【讨论】:
一种选择是提取数字前的列名并将其用于 groupby.max,然后获取 prod:
df['product'] = (df.groupby(df.columns.str.extract('(D+)d+', expand=False),
axis=1)
.max().prod(axis=1)
)
输出:
Column A Vote1 Vote2 Size1 Size2 product
0 Item1 2 -1 2.5 2.1 5.0
1 Item2 -3 3 2.2 3.3 9.9
【讨论】: