我有一个百分比的熊猫DataFrame,例如:
Feature Sample1 Sample2 ...
feat_1 0 .5
feat_2 .2 .4
feat_3 .7 .6
...
原始问题中有两个类。对于每个功能样本,该值代表第一类的百分比(第二类的百分比只是补数1-perc
)。
我想为每个功能计算entropy分布,即:
feat_1
,分布将由Sample1
的最小熵(0),Sample2
的最大熵等组成。feat_2
和feat_3
,熵的前两个值将处于中间状态我的方法如下:
scipy.stats.entropy
需要每个类别的概率,并且我有两个类别,所以我将每个列(样本)复制到百分比列(原始列)和互补百分比列(1-原始列)中现在我正在使用以下代码:
import pandas as pd
import scipy.stats as ss
n_samples = 1000
# duplicate each column into percentage column and complementary percentage column
df = pd.concat([df, 1 - df], axis=1)
df.columns = [f'{sp}_{cl}' for cl in ['pos', 'zer'] for sp in range(n_samples)]
# compute entropy for each pair of columns
entropy = pd.concat([df.loc[:, df.columns.str.startswith(str(s) + '_')].apply(ss.entropy, axis=1) for s in range(n_samples)], axis=1)
是否有使用内置pandas
API优化此代码的方法?我可以使用joblib进行并行化,但是我更喜欢内置方法。