遍历pandas数据帧中的每一行,并将所有行值乘以同一数据帧中的行值之一

时间:2019-04-02 19:48:21

标签: python pandas function dataframe iteration

我正在尝试规范化数据框中的行值。需要标准化的值在其列标题中包含文本“ 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

2 个答案:

答案 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')