从具有相似前缀的列中划分元素



我有以下DataFrame:

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

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

谢谢。

一种方法:

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)

如果前缀总是*_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(由于列索引不可对齐)。

相关内容

  • 没有找到相关文章

最新更新