【问题标题】:How to use crosstab for multiple columns?如何对多列使用交叉表?
【发布时间】:2019-03-25 02:37:53
【问题描述】:

我需要帮助在下面的 df 上使用交叉表。

    a       b       c
-------------------------
|   a   |  None |   c   |
|   a   |   b   |  None |
|  None |   b   |   c   |
|   a   |  None |  None |
|  None |  None |  None |

我想提取指定超过字母的行(a&b、a&c、b&c),即第 1-3 行。我相信最简单的方法是通过交叉表(我知道我会得到一个计数,但我也可以通过这种方法查看行吗?)。我想避免写一个冗长的“或”语句来实现这一点。

期望的输出:

    a       b       c
-------------------------
|   a   |  None |   c   |
|   a   |   b   |  None |
|  None |   b   |   c   |

【问题讨论】:

  • 请将您的预期输出添加到问题中。这是可能的,只是取决于你最终需要什么。
  • @ALollz 已更新。

标签: pandas crosstab


【解决方案1】:

您不是在寻找交叉表,只需使用 notnull 检查非空值的数量:

df[df.notnull().sum(1).gt(1)]

     a    b    c
0    a  NaN    c
1    a    b  NaN
2  NaN    b    c

或者你可以使用dropna:

t = 2
df.dropna(thresh=df.shape[1] - t + 1)

     a    b    c
0    a  NaN    c
1    a    b  NaN
2  NaN    b    c

【讨论】:

  • 这不是整个数据框。如何仅在这 3 列上执行此操作?从技术上讲,我也有一列“d”。为了这个问题,我决定尽可能简单。
  • @user10939484 df[df.loc[:,'a':'c'].notna().sum(1).ge(2)]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多