簡體   English   中英

Pandas:基於列名稱的列的成對乘法

[英]Pandas: pairwise multiplication of columns based on column name

我有以下DataFrame

>>> 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_Xas1_X相乘並將該值放在as1_X ,類似於ap2_Xas2_X 這里的公共標識符是apas之后的數字。

最終的DataFrame看起來應該是這樣的

>>> df
   ap1_X  as1_X  ap2_X  as2_X
0      1      1      2      6
1      2      4      2      6
2      3      9      2      6
3      4      16     2      6

我知道我可以循環遍歷列並將列名中具有相同第3個字符的列相乘,但我想知道是否有更多的“熊貓”方法嗎?

更新:列名中的數字ID可以是多個數字(例如:1,2,...,12,...,100)。 所以基本上,ID是'ap'或'as'和'_X'之間的數字。

您可以使用axis=1進行groupby ,key是常用數字

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

你可以在這里使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM