首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pandas如何根据其他列填充NaN/None值?

pandas如何根据其他列填充NaN/None值?
EN

Stack Overflow用户
提问于 2015-11-24 08:11:34
回答 1查看 599关注 0票数 1

给定以下内容,我如何根据其他行设置B行的NaN/None值?我应该使用apply吗?

代码语言:javascript
运行
复制
d = [
    {'A': 2, 'B': Decimal('628.00'), 'C': 1, 'D': 'blue'},
    {'A': 1, 'B': None, 'C': 3, 'D': 'orange'},
    {'A': 3, 'B': None, 'C': 1, 'D': 'orange'},
    {'A': 2, 'B': Decimal('575.00'), 'C': 2, 'D': 'blue'},
    {'A': 4, 'B': None, 'C': 1, 'D': 'blue'},
]

df = pd.DataFrame(d)

# Make sure types are correct
df['B'] = df['B'].astype('float')
df['C'] = df['C'].astype('int')

In : df
Out:
   A    B  C       D
0  2  628  1    blue
1  1  NaN  3  orange
2  3  NaN  1  orange
3  2  575  2    blue
4  4  NaN  1    blue

In : df.dtypes
Out:
A      int64
B    float64
C      int64
D     object
dtype: object

以下是当值为None时设置B的“规则”示例:

代码语言:javascript
运行
复制
def make_B(c, d):
    """When B is None, the value of B depends on C and D."""
    if d == 'blue':
        return Decimal('1400.89') * 1 * c
    elif d == 'orange':
        return Decimal('2300.57') * 2 * c
    raise
EN

回答 1

Stack Overflow用户

发布于 2015-11-24 09:24:00

下面是我解决这个问题的方法:

我对make_B的定义如下:

代码语言:javascript
运行
复制
def make_B(x):
    if np.isnan(x['B']):
        """When B is None, the value of B depends on C and D."""
        if x['D'] == 'blue':
            return Decimal('1400.89') * 1 * x['C']
        elif x['D'] == 'orange':
            return Decimal('2300.57') * 2 * x['C']
    else:
        return x['B']

然后我使用应用:

代码语言:javascript
运行
复制
df.apply(make_B,axis=1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33883200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档