如何在Pandas中基于单元格值创建并填充Freq_1与Freq_2统计列
解决方法:给DataFrame添加每行数字出现次数的列
要实现你需要的功能,其实可以利用Pandas里的eq()方法和按行求和的操作,非常简洁高效。
首先,先回顾下你的DataFrame结构:
import pandas as pd d = {'feature1': [1, 22,45,78,78], 'feature2': [33, 2,2,65,65], 'feature3': [100, 2,359,87,2],} df = pd.DataFrame(data=d)
输出的df是:
feature1 feature2 feature3 0 1 33 100 1 22 2 2 2 45 2 359 3 78 65 87 4 78 65 2
接下来,我们直接用两行代码就能创建并填充Freq_1和Freq_2列:
# 统计每行中数字1的出现次数,赋值给Freq_1 df['Freq_1'] = df.eq(1).sum(axis=1) # 统计每行中数字2的出现次数,赋值给Freq_2 df['Freq_2'] = df.eq(2).sum(axis=1)
代码解释:
df.eq(1):会生成一个和原df结构相同的布尔DataFrame,所有等于1的元素位置为True(对应数值1),其他为False(对应数值0)。.sum(axis=1):按行对布尔值求和,本质就是统计每行中True的数量,也就是目标数字的出现次数。- 最后把求和结果直接赋值给新列,Pandas会自动匹配行索引完成赋值。
执行完代码后,你的df会变成:
feature1 feature2 feature3 Freq_1 Freq_2 0 1 33 100 1 0 1 22 2 2 0 2 2 45 2 359 0 1 3 78 65 87 0 0 4 78 65 2 0 1
完全符合你要求的规则:第一行Freq_1是1,其他行是0;Freq_2第一行是0,第二行是2,第三和第五行是1,第四行是0。
如果以后需要统计其他数字的出现次数,只需要把eq()里的数字换成目标数字就行,非常灵活。
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

