gpt4 book ai didi

Python 数据框 :Change values of a column based on another column?

转载 作者:行者123 更新时间:2023-12-04 15:31:15 41 4
gpt4 key购买 nike

我有一个包含两列 ab 的 DataFrame。我想更改 b 列中的 NaN 值。例如:对于 a 列中的值 123,b 列同时具有 abcNaN。我希望两者都更改为 abc:

df
a b
0 123 NaN
1 123 abc
2 456 def
3 456 NaN

我的预期结果是:

df
a b
0 123 abc
1 123 abc
2 456 def
3 456 def

示例数据:

import pandas as pd
from io import StringIO

s = '''\
a,b
123,NaN
123,abc
456,def
456,NaN
'''
df = pd.read_csv(StringIO(s))

描述问题和我尝试过的方法:

df.loc[df.a == 123, 'b'] = "abc"

在这里,我只能针对特定值进行更改。即,如果 'a' 为 123

,则将 'b' 替换为 abc

但是对于 df.a == 123'b'NaN 我还希望它更新 abc.

所以我试了一下,

df.loc[df.a == NaN, 'b'] = "abc"

但是,这使得 df 中的所有空列都变成了 abc

那么,我该如何着手呢?

编辑 2:示例数据 2

raw_data = {'a': [123, 123, 456, 456,789], 'b': 
[np.nan,'abc','def',np.nan,np.nan], 'c':
[np.nan,np.nan,0,np.nan,np.nan]}

df = pd.DataFrame(raw_data, columns =
['a', 'b','c'])

回答:

 df['b'] = df['a'].map(df.groupby('a')['b'].first()).fillna(df['b'])

最佳答案

也许首先对数据框进行排序,然后使用 ffill。像这样的东西:

df = df.sort_values(by=['a','b']).fillna(method='ffill')

当您有 NaN 值时不想覆盖(您的“edit2”),您还可以使用 groupby:

df['b'] = df.sort_values(by=['a','b','c']).groupby('a')['b'].ffill()

关于Python 数据框 :Change values of a column based on another column?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61233309/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com