繁体   English   中英

根据另一列的条件替换一列的值,Pandas

[英]Replace value from a column based on condition of another column, Pandas

首发DataFrame

df = pd.DataFrame({'Column A' : ['red','green','yellow', 'orange', 'red', 'blue'],
                   'Column B' : [NaN, 'blue', 'purple', NaN, NaN, NaN],
                   'Column C' : [1, 2, 3, 2, 3, 7]})
A列 B列 专栏C
'红色的' 钠盐 1个
'绿色' '蓝色的' 2个
'黄色' '紫色的' 3个
'橘子' 钠盐 2个
'红色的' 钠盐 3个
'蓝色的' 钠盐 7

期望的结果

A列 B列 专栏C
'红色的' 钠盐 1个
'蓝色的' '蓝色的' 2个
'紫色的' '紫色的' 3个
'橘子' 钠盐 2个
'红色的' 钠盐 3个
'蓝色的' 钠盐 7

我想仅当 B 列中的值不是 NaN 时才替换 A 列中的值,并将 A 列替换为 B 列中的值

这样我就可以运行以下代码:

df[[Column_A, Column_C]].groupby(Column_A).sum()

这将导致以下 DataFrame:

A列 专栏C
'红色的' 4个
'蓝色的' 9
'紫色的' 3个
'橘子' 2个

我正在尝试在进行groupby调用之前替换类别。

尝试:

我正在使用的 DataFrame 有一个从 0 到 N 的基于顺序数字的索引。
所以我可以硬编码以下内容:
df.iloc[[index], column] = some_string
我不想这样做,因为它不是动态的,并且 DataFrame 数据可能会更改。

我相信我可以在df.apply()上使用.agg()或 .apply( df.groupby()但这是我一直在努力的地方。

特别是如何编写 function 以与.agg().apply()一起使用

说:

def my_func(x):
    print(x)

然后:
df.apply(my_func)
结果是df打印的第一列。
或者:
df.apply(my_func, axis = 1)

结果是每行的以下格式:

Column A    red
Column B    Nan
Column C    1
Name: 0, dtype: object
Column A    green
Column B    blue
Column C    2
Name: 1, dtype: object

我不确定如何访问my_func中每行的每一列。

编辑:
如果 B 列中该行的值不是 NaN,我试图找到一种方法来更改 A 列中的值。 用于替换的值是 B 列中的值,如果 B 列不是 NaN,则要替换的值是 A 列中的值。

但我想动态地执行此操作,这意味着不像我展示的那样硬编码:
df.iloc[[index], column] = some_string

正如您提到的,您可以像这样使用pd.apply

df['Column A'] = df.apply(lambda x: x['Column B'] if str(x['Column B']) not in ['nan', 'NaN'] else x['Column A'], axis=1)

  Column A Column B  Column C
0      red      NaN         1
1     blue     blue         2
2   purple   purple         3
3   orange      NaN         2
4      red      NaN         3
5     blue      NaN         7

请注意,对于非常大的数据集,应用速度不快是不可取的。 对于替代方法,有一些很好的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM