根据其他一些列修改数据框的部分列值

时间:2019-01-29 21:01:20

标签: python pandas dataframe

我试图根据另一列的值更新/修改数据框的某些部分。

如果列['a']为空,请像下面这样用列['a']的值填充列['b']

list_position = [[4, 35]]
df.iloc[list_position[0][0]:list_position[0][1] + 1,:]['a'] = df.iloc[list_position[0][0]:list_position[0][1] + 1,:].apply(lambda row: row['a'] * row['b'] if np.isnan(row['a']) else row['b'], axis=1)

它给出错误为TypeError: an integer is required

Traceback (most recent call last):
  File "pandas\_libs\index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 958, in pandas._libs.hashtable.Int64HashTable.get_item
TypeError: an integer is required

任何纠正它的建议都将受到高度赞赏。

更新1.我尝试了建议的所有三种方式 1个重复的答案

df['Cat1'].fillna(df['Cat2'])    

此帖子建议2个答案。

1. df['a'][df['a'].isnull()] = df['b']
2. df['a'] = df['a'].fillna(df['b'])

所有人都给出与以下内容相同的错误:

Traceback (most recent call last):
  File "pandas\_libs\index.pyx", line 162, in 
pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 958, in 
pandas._libs.hashtable.Int64HashTable.get_item
TypeError: an integer is required

如果我将列名替换为列号(如

df[7] = df[7].fillna(df[8)

不确定为什么,如果有人对此有解释。

2 个答案:

答案 0 :(得分:0)

这应该适合您的情况

df['a'][df['a'].isnull()] = df['b']

答案 1 :(得分:0)

我可以看到您试图用来完成任务的逻辑,但是有一种更简单的方法来完成它。

df['a'] = df['a'].fillna(df['b'])

这将用相同索引的b列中的值填充a列中的空值。但是,如果b列具有空值,而a列具有空值,则a列也将具有空值。

相关问题