【问题标题】:Python pandas: Faster way than numpy.select?Python pandas:比 numpy.select 更快的方式?
【发布时间】:2021-03-26 09:10:19
【问题描述】:

我有一个包含两列的数据框,如下所示:

      GebTyp BAK
0         RH   C
1        MFH   A
2         RH   J
3         RH   F
4         RH   K
...      ...  ..
25046    MFH   C
25047    MFH   G
25048    MFH   I
25049    MFH   A
25050    MFH   B

还有一个为这两列的每一对提供值。

   BAK  EFH/DHH     RH    MFH    GMH     HH
0    A    231.0  222.0  265.0  186.0  156.0
1    B    271.0  222.0  204.0  186.0  156.0
2    C    214.0  186.0  222.0  197.0  167.0
3    D    242.0  183.0  236.0  201.0  171.0
4    E    184.0  155.0  188.0  196.0  143.0
5    F    198.0  179.0  162.0  158.0  121.0
6    G    134.0  145.0  138.0  134.0  104.0
7    H    159.0  118.0  143.0  103.0   73.0
8    I    120.0  110.0  119.0   97.0   87.0
9    J     91.0   89.0   86.0   75.0   69.0
10   K      NaN    NaN    NaN    NaN    NaN
11   L      NaN    NaN    NaN    NaN    NaN

我可以像这样使用numpy.select 正确分配每个单独的值:

def GWB()
    conditions = [
        (mc["BAK"] == "A" & mc["GebTyp"] == "EFH/DHH"),
        (mc["BAK"] == "A" & mc["GebTyp"] == "RH"),
        (mc["BAK"] == "A" & mc["GebTyp"] == "MFH"),
        (mc["BAK"] == "A" & mc["GebTyp"] == "GMH"),
        (mc["BAK"] == "A" & mc["GebTyp"] == "HH"),
    ]

    values = [
        (231),
        (222),
        (265).
        (186),
        (156)
    ]
    df["result"] = np.select(conditions,values)
GWB()

但这会产生大约 80 行代码,在这种情况下,我也只使用第一个数据帧,手动分配值。我想知道是否有更快/更短的方法来完成这项任务?

【问题讨论】:

    标签: pandas dataframe numpy select


    【解决方案1】:

    DataFrame.mergeDataFrame.melt 一起使用:

    df = df1.merge(df2.melt('BAK', value_name='result', var_name='GebTyp'), 
              how='left', 
              on=['BAK','GebTyp'])
    print (df)
       GebTyp BAK  result
    0      RH   C   186.0
    1     MFH   A   265.0
    2      RH   J    89.0
    3      RH   F   179.0
    4      RH   K     NaN
    5     ...  ..     NaN
    6     MFH   C   222.0
    7     MFH   G   138.0
    8     MFH   I   119.0
    9     MFH   A   265.0
    10    MFH   B   204.0
    

    【讨论】:

    • 如果我在 df1 中有其他几列,这是否也有效?没有提到他们是为了不强调问题的程度
    • @Jonas - 我认为是的,但也可以添加 on 参数以设置连接列。
    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2020-06-19
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多