【问题标题】:if nan python pandas loopif nan python pandas循环
【发布时间】:2019-04-24 23:44:42
【问题描述】:

这有点奇怪,我没有示例数据框,但如果有人可以提供帮助,那就太好了。

我有 3 列 A、B 和 C。

C 可能是空白/nan。

我的意思是,如果 C 为空白,并且 A 和 B 等于上一行的 A 和 B 的值。然后将 C 设置为与上一行的 C 相同的值。

这是我目前所拥有的。它正在运行但不改变 C 的值。

for i, row in df.iterrows():

    if df['C'][i]==np.nan:
        if df[['A','B']][i]==df[['A','B']][i-1]:
            df['C'][i]=df['C'][i-1]
        else:
            pass
    else:
        pass

有人知道为什么这可能不起作用吗?

非常感谢

我也试过了,但是这段代码根本不起作用

 for i, row in df.iterrows():

    if df['C'][i]==np.nan & df[['A','B']][i]==df[['A','B']][i-1]:
            df['C'][i]=df['C'][i-1]

    else:
        pass       

所以 df:

A    B    C
w    4    t
w    4
a   r     c

输出应该是:

  A    B    C
    w    4    t
    w    4    t
    a   r     c

【问题讨论】:

  • 得到了答案,感谢下面的人。如果有人看到循环有什么问题,请发表评论,因为我现在真的很好奇

标签: pandas loops if-statement


【解决方案1】:

你应该试试np.whereDataFrame.shift

df = pd.DataFrame({'A':np.random.randint(0, 20, size = 100),
                  'B': np.random.randint(0, 20, size = 100),
                   'C':np.random.randint(0, 20, size = 100)})

   A    B   C
0   9   0   16
1   15  15  13
2   9   1   4
3   14  13  18
4   4   14  10



df['C'] = np.where((df['A'] == df['A'].shift(1)) & (df['B'] == df['B'].shift(1))& (df['C'] == np.nan), df['C_shift'], df['C'])

np.sum(df['C'] == df['C'].shift(
>>3

【讨论】:

  • 完美运行。非常感谢
  • @fred.schwartz 乐于助人:}
【解决方案2】:

你可以使用:

df['C'] = np.where((df['A']==df['A'].shift()) & (df['B']==df['B'].shift()) & (df['C'].isnull()), df['C'].shift(), df['C'] )

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2021-10-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多