基于另一DataFrame的值统计目标DataFrame行内非空值(Pandas求助)
基于另一个Pandas DataFrame新增行非空值统计列的解决方案
嘿,我来帮你搞定这个问题!从你的示例数据来看,你想要给df1新增一列,这列的值对应df2每行的非空(这里应该是指非0值)数量对吧?下面是具体的实现步骤:
1. 先还原你的示例数据
首先我们先把你给出的两个DataFrame用代码创建出来,方便测试:
import pandas as pd df1 = pd.DataFrame({ 'a_1': [0, 1, 0], 'a_2': [2, 3, 0], 'a_3': [5, 4, 0] }) df2 = pd.DataFrame({ 'b_1': [0, 1, 0], 'b_2': [0, 0, 0], 'b_3': [1, 1, 0] })
2. 统计每行非空值并新增列
我们可以用Pandas的布尔判断和按行求和来快速实现:
# 统计df2每行的非0值数量,将结果作为新列添加到df1中 df1['non_zero_count'] = df2.ne(0).sum(axis=1)
代码解释:
df2.ne(0):生成一个布尔型DataFrame,所有不等于0的元素会被标记为True,等于0的标记为Falsesum(axis=1):按行对布尔值求和(True会被视为1,False视为0),得到的就是每行非0值的数量- 直接将这个结果赋值给
df1的新列non_zero_count,Pandas会自动按索引对齐行,完全不用担心顺序问题
3. 最终结果
运行完代码后,df1会变成这样:
| a_1 | a_2 | a_3 | non_zero_count |
|---|---|---|---|
| 0 | 2 | 5 | 1 |
| 1 | 3 | 4 | 2 |
| 0 | 0 | 0 | 0 |
如果你的“非空值”指的是Pandas中的NaN(缺失值),只需要把代码改成下面这样就行:
df1['non_null_count'] = df2.notna().sum(axis=1)
内容的提问来源于stack exchange,提问作者Michael Dowling
相关产品推荐
相关产品推荐

