我正在尝试规范化数据框中的行值。需要标准化的值在其列标题中包含文本“ Count”。还有其他一些列的标题中没有单词“ Count”,我希望它们保持不变。我在名为“规范化值”的列中有一个规范化值。
因此,在逐行迭代中,需要将每一行的规范化值乘以属于其标题包含单词“ count”的列的每个值。该数据框具有我要保留的多索引,并且有很多列和行,因此我需要在不指定确切位置或名称的情况下执行此操作。
无济于事,我尝试了乘法,广播,迭代,用户定义的函数。
这是我的示例数据框:
Sample Timepoint CountA CountB PercentA PercentB CountC Normalization Value
1 1 10 20 40 30 50 .1
2 1 20 10 25 35 100 .2
2 2 50 20 20 22 40 .5
这是我希望数据计数归一化后的样子:
Sample Timepoint CountA CountB PercentA PercentB CountC Normalization Value
1 1 1 2 40 30 5 .1
2 1 4 2 25 35 20 .2
2 2 25 10 20 22 20 .5
答案 0 :(得分:2)
您可以使用str.contains
,然后将mul
的结果分配回.loc
,这里也是因为您需要将其分配回来,而filter
将失败
s=df.columns.str.contains('Count')
df.loc[:,s]=df.loc[:,s].mul(df['Normalization Value'],0)
df
Out[238]:
Sample Timepoint ... CountC Normalization Value
0 1 1 ... 5.0 0.1
1 2 1 ... 20.0 0.2
2 2 2 ... 20.0 0.5
[3 rows x 8 columns]
答案 1 :(得分:1)
您需要使用带有{{1}的.filter()
来过滤列,然后使用regex
对其进行修改并将其放回主数据帧。
.loc
输出:
df.loc[:, df.filter(regex='Count*', axis=1).columns] = df.loc[:, df.filter(regex='Count*', axis=1).columns].multiply(df['Normalization'], axis='index')