【问题标题】:How to multiply two columns in pandas, by only non-NaN values?如何将熊猫中的两列仅乘以非 NaN 值?
【发布时间】:2019-02-27 23:50:03
【问题描述】:

我很好奇是否可以将两列 A,B 仅乘以非 NAN 值。

我有以下具有预期结果的数据框:

                         A     B     C
    Date     Symbol  

  1/1/2017    BTC       Nan    2     Nan
              ETH        3     Nan   6
              XRP        2     Nan   4
  1/2/2017    BTC       Nan    3     Nan
              ETH        1     Nan    3
              XRP        2     Nan    6

我正在尝试将 A 列的非 Nan 值乘以 B 列的非 NaN 值,并将结果分配给 C 列。 我想遍历数据框。我尝试了几件事,但没有任何效果。

【问题讨论】:

  • 如果其中一个组的单列中有多个非 nan 值,您期望什么结果?
  • 我想将 A 列中的每个非 Nan 值乘以 B 列的非 Nan 值,并将结果传递到 C 列中,以获得 A 列中具有非 Nan 值的符号。
  • 如果A,B 中的一个/两个都是NaN,您希望在C 中存储什么?您想要 NaN 输出,还是保留 C 的当前值?
  • 这有点令人困惑,因为您的 none 行的 A 和 B 都具有非空值,根据您所描述的逻辑,这应该意味着 C 中的所有内容都应该为空.
  • 是的,您应该提供一个更好的示例,其中一些行既没有 NaN,而有些行又没有 NaN。

标签: python pandas nan multiplication


【解决方案1】:

检查ffill

#df=df.replace('Nan',np.nan)# Nan is not NaN , replace it 
#df=df.apply(pd.to_numeric,1) # convert to numeric 
df.C=df.A*(df.B.ffill())
df
Out[130]: 
                   A    B    C
Date     Symbol               
1/1/2017 BTC     NaN  2.0  NaN
         ETH     3.0  NaN  6.0
         XRP     2.0  NaN  4.0
1/2/2017 BTC     NaN  3.0  NaN
         ETH     1.0  NaN  3.0
         XRP     2.0  NaN  6.0

【讨论】:

  • ffill is more commonly known as fillna(..., method='ffill'). That's also a more self-explanatory name.。实际上,我认为在这个用例中向前/向后填充是不正确的,它会给出错误的答案。
  • @smci 让我们等待操作并感谢您提供更多信息
  • 转发/回填显然是错误的做法,您将错误地使用带有 NaN 的行,并且(更糟糕的是)只是从前几行(我们已经知道 OP 没有'不想)。
  • @smci 我会等待操作的澄清,到目前为止只是简单地匹配他的输出
  • 文本:哦,对不起,我以为OP的专栏C显示的只是输入垃圾,是的,在这种情况下你可能是对的,我们将不得不等待他们的确认(和更全面的测试用例)。一旦 OP 编辑​​澄清,我会将其修复为赞成票,然后如果您对此答案进行令牌编辑以解锁我的投票。啊……
猜你喜欢
  • 2020-05-16
  • 1970-01-01
  • 2016-04-09
  • 2021-07-22
  • 2018-01-13
  • 2020-04-06
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
相关资源
最近更新 更多