python - 根据其他列修改数据框的部分列值

标签 python pandas dataframe

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

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

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:需要一个整数

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)

不知道为什么,如果有人对此有解释。

最佳答案

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

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

这将使用同一索引上的 b 列中的值填充 a 列中的空值。但是,如果列 b 具有空值并且列 a 具有空值,则列 a 也将具有空值。

关于python - 根据其他列修改数据框的部分列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54429499/

相关文章:

python - flask.request.form 中的动态表单字段

python - 在 pandas df 中添加值的有效方法

python - 如何在 Pandas 中连接两个具有不同列名的数据框? - Python

Python:合并数据框并将所有值保留在单元格中(如果不相同)

python - 使用Python在云端进行并行处理

python - 如何将列追加到字典内的数据框

python - 计算范围内所有 n 个数的四面体编号,将其存储在列表中并返回

python - 转置具有多列的 pandas 数据框

python - Pandas - 如何对由列表对象组成的列进行子集化?

r - 如何找到列和数据框之间的匹配?