熊猫-根据另一列值的条件更改一列中的值

时间:2020-05-05 20:51:59

标签: python pandas

我对Pandas非常陌生,如果这是一个非常愚蠢的问题,我深表歉意。对于下面的屏幕快照链接,如果ge65_suppress_flag的值带有#符号,我想将total_claim_count_ge65下的NaN值更改为5。我想使用一个for循环遍历ge65_suppress_flag列,每次遇到#符号时,它将在下一列(total_claim_count_ge65)中将NaN值更改为5。

enter image description here

5 个答案:

答案 0 :(得分:0)

尝试类似的东西:

df[df['ge65_suppress_flag'] == '#']['total_claim_count_ge65'].fillna(5, inplace=True)

答案 1 :(得分:0)

没有菜鸟问题,我之前也有这个问题。 因此,这是一个典型的vlookup函数,是通过python pandas,xlsxwriter实现的ez 1.从脚本中阅读ur excel和表格, 2.找到ur单元,可以从excel阅读器或提供的库python中找到它。 3.逻辑是处理行和列,比较单元格并覆盖。 注意:请勿尝试在python和Microsoft Excel Reader中打开excel文件,否则会出错。 您可以找到一些示例,然后对位进行处理就可以了。

快乐编码!

答案 2 :(得分:0)

创建类似的数据框

import pandas
df1 = pd.DataFrame({"ge65_suppress_flag": ['bla', 'bla', '#', 'bla'], "total_claim_count_ge65": [1.0, 2.0, None, 4.0]})

ge65_suppress_flag列值等于'#'的行中填充5.0

df1.loc[df1['ge65_suppress_flag']=="#", 'total_claim_count_ge65'] = 5.0

答案 3 :(得分:0)

在给您解决方案后,我将逐步说明。

这是行之有效的。 df[df[0]=='#'] = df[df[0]=='#'].fillna(5)

为了使解决方案更通用,我根据您的屏幕截图使用了列的索引。您可以更改索引号,也可以通过名称指定,例如:df['name_of_column']

分步说明:

首先,您要使用第一列df [0]中的变量属性来仅选择等于字符串'#'的那些属性:

df[df[0]=='#']

接下来,使用熊猫fillna function将np.NaN的所有变量属性替换为5:

df[df[0]=='#'].fillna(5)

根据fillna文档,此函数返回一个新的数据框。因此,为避免这种情况,您希望将数据框的子部分设置为函数返回的内容。

df[df[0]=='#'] = df[df[0]=='#'].fillna(5)

答案 4 :(得分:0)

df.applylambda一起使用:

d = {'ge65_suppress_flag': ['not_supressed','not_supressed','#'], 'total_claim_count_ge65': [516.03, 881.0, np.nan]}
df = pd.DataFrame(data=d)
df['total_claim_count_ge65'] = df.apply(lambda x: 5 if x['ge65_suppress_flag']=='#' else x['total_claim_count_ge65'], axis=1)
print(df)

打印:

  ge65_suppress_flag  total_claim_count_ge65
0      not_supressed                  516.03
1      not_supressed                  881.00
2                  #                    5.00