【问题标题】:Divide elements from columns with similar prefix从具有相似前缀的列中划分元素
【发布时间】:2021-12-15 05:33:16
【问题描述】:

我有以下数据框:

df = pd.DataFrame(list(zip([1,2],
           [5,6],
           [9,10],
           [13,14])))
df.columns =['x_A', 'y_A', 'x_B', 'y_B']
df:
    x_A y_A x_B y_B
  0 1   5   9   13
  1 2   6   10  14

我想将具有相似前缀的列分开以获得以下内容:

df: 
    x    y
 0  1/9  5/13
 1  2/10 6/14

如果可能的话,这可以用一行来完成吗?

谢谢。

【问题讨论】:

  • 是否总是有相同数量的列,并且总是只有 2 个前缀要计算 (x, y) ?
  • 多个前缀 (x,y,z,w,h...) 但它们总是成对出现,如上例所示。

标签: python pandas dataframe prefix divide


【解决方案1】:

一种方法:

def divide_reduce(x):
    y = x.to_numpy().astype(np.float64)
    return np.divide.reduce(y, axis=1)

res = df.groupby(df.columns.str[0], axis=1).agg(divide_reduce)
print(res)

输出

          x         y
0  0.111111  0.384615
1  0.200000  0.428571

如果您更喜欢单行方法,您可以使用:

res = df.astype(np.float64).groupby(df.columns.str[0], axis=1).agg(np.divide.reduce, axis=1)

【讨论】:

    【解决方案2】:

    如果前缀始终是 *_A 和 *_B 格式,您可以使用 filter 和除法来达到这种效果:

    df.filter(like='_A') / df.filter(like='_B').to_numpy()
    
            x_A       y_A
    0  0.111111  0.384615
    1  0.200000  0.428571
    

    第二个子帧需要 .to_numpy() 调用来强制除法并避免结果中出现 NaN(由于列索引无法对齐)。

    【讨论】:

      猜你喜欢
      • 2022-10-30
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 2017-02-06
      • 2021-08-20
      • 2019-11-12
      相关资源
      最近更新 更多