熊猫数据框 - 配对存储桶中的行

Posted

技术标签:

【中文标题】熊猫数据框 - 配对存储桶中的行【英文标题】:Pandas dataframe - pairing off rows within a bucket 【发布时间】:2015-06-23 01:02:31 【问题描述】:

我有一个如下所示的数据框:

       bucket  type   v
0         0    X      14
1         1    X      10
2         1    Y      11
3         1    X      15
4         2    X      16
5         2    Y      9
6         2    Y      10
7         3    Y      20
8         3    X      18
9         3    Y      15
10        3    X      14

所需的输出如下所示:

       bucket  type   v    v_paired
0         1    X      14   nan      (no Y coming before it)
1         1    X      10   nan      (no Y coming before it)
2         1    Y      11   14 (highest X in bucket 1 before this row)
3         1    X      15   11   (lowest Y in bucket 1 before this row)

4         2    X      16   nan (no Y coming before it in the same bucket)
5         2    Y      9    16 (highest X in same bucket coming before)
6         2    Y      10   16 (highest X in same bucket coming before)

7         3    Y      20   nan (no X coming before it in the same bucket)
8         3    X      18   20  (single Y coming before it in same bucket)
9         3    Y      15   18 (single Y coming before it in same bucket)
10        3    X      14   15  (smallest Y coming before it in same bucket)

目标是构造v_paired列,规则如下:

在同一个存储桶中查找在此存储桶之前、具有相反类型(X 与 Y)的行,将这些称为“候选配对”

如果当前行是 X,请选择最小值。 v out the pair Candidates to become v_paired for the current row,如果当前行是Y,则选择最大值。 v 在候选对中成为当前行的 v_paired

提前致谢。

【问题讨论】:

【参考方案1】:

我认为这应该按顺序进行... 第一个按桶分组

groups = df.groupby('bucket', group_keys=False)

此功能将应用于每个存储桶组

def func(group):
    y_value = None
    x_value = None
    result = []
    for _, (_, value_type, value) in group.iterrows():
        if value_type == 'X':
            x_value = max(filter(None,(x_value, value)))
            result.append(y_value)
        elif value_type == 'Y':
            y_value = min(filter(None,(y_value, value)))
            result.append(x_value)
    return pd.DataFrame(result)

df['v_paired'] = groups.apply(func)

希望这能完成这项工作

【讨论】:

是的,但没有其他办法......因为你需要保持状态......你也在做 groupby 这将使事情变得更快,更容易阅读...... 如果没有更好的答案,你能接受我的回答吗 不,因为有更好的方法。

以上是关于熊猫数据框 - 配对存储桶中的行的主要内容,如果未能解决你的问题,请参考以下文章

具有连续色调的 Seaborn 配对图?

将谷歌存储桶中的所有 .csv 文件读取到一个大熊猫 df 中,然后以 .csv 格式保存到另一个桶中

将数据框中的列进行配对差分,生成130万列的数据框。

如果一对列值未在另一个 df2 中配对,则删除 df1 中的行

将列表作为大熊猫中的行附加数据框

Android蓝牙开发——经典蓝牙:配对与解除配对 & 实现配对或连接时不弹出配对框