Pandas:基于列名称的列成对乘法

时间:2018-12-14 15:00:45

标签: python pandas

我有以下DataFrame

Integer

我想将>>> df = pd.DataFrame({'ap1_X':[1,2,3,4], 'as1_X':[1,2,3,4], 'ap2_X':[2,2,2,2], 'as2_X':[3,3,3,3]}) >>> df ap1_X as1_X ap2_X as2_X 0 1 1 2 3 1 2 2 2 3 2 3 3 2 3 3 4 4 2 3 ap1_X相乘,然后将该值放入as1_X,对于as1_Xap2_X则类似。此处的通用标识符是as2_Xap之后的数字。

最终的DataFrame应该看起来像这样

as

我知道我可以遍历各列,并将列名中具有相同第3个字符的列相乘,但是我想知道是否还有更多的“熊猫”方式?

更新:列名称中的数字ID可以是多个数字(例如:1、2,...,12,...,100)。因此,基本上,ID是“ ap”或“ as”与“ _X”之间的数字。

2 个答案:

答案 0 :(得分:3)

您可以使用groupbyaxis=1,并且密钥是公用号码

df.groupby(df.columns.str[2],axis=1).prod()
Out[73]: 
    1  2
0   1  6
1   4  6
2   9  6
3  16  6

答案 1 :(得分:2)

您可以在此处使用filter

df.filter(like='p') * df.filter(like='s').values

   ap1_X  ap2_X
0      1      6
1      4      6
2      9      6
3     16      6

另一种解决方案是argsort列名和片。这应该非常有效。

idx = np.argsort(df.columns.str[1])
l = len(df) // 2
df.iloc[:, idx[:l]] * df.iloc[:, idx[l:]].values 

   ap1_X  ap2_X
0      1      6
1      4      6
2      9      6
3     16      6