【问题标题】:How to merge multiple columns containing numeric data in Pandas, but ignore empty cells如何在 Pandas 中合并包含数字数据的多列,但忽略空单元格
【发布时间】:2020-11-03 05:01:03
【问题描述】:

我有一张这样的桌子:

|-----|-----|-----|
|  A  |  B  |  C  |
|-----|-----|-----|
|     |  5  |     |
|-----|-----|-----|
|  1  |     |     |
|-----|-----|-----|
|     |  5  |     |
|-----|-----|-----|
|     |     |  2  |
|-----|-----|-----|
|     |     |  2  |
|-----|-----|-----|

其中所需范围内的每一列在其行中只有一个整数。我想将这些列合并成一个新列,如下所示:

|-----|-----|-----|    |-----|
|  A  |  B  |  C  |    |  Z  |
|-----|-----|-----|    |-----|
|     |  5  |     | →  |  5  |
|-----|-----|-----|    |-----|
|  1  |     |     | →  |  1  |
|-----|-----|-----|    |-----|
|     |  5  |     | →  |  5  |
|-----|-----|-----|    |-----|
|     |     |  2  | →  |  2  |
|-----|-----|-----|    |-----|
|     |     |  2  | →  |  2  |
|-----|-----|-----|    |-----|

我一直在寻找,但我能找到的最接近的解决方案是:

df.iloc[:,some_column:another_column].apply( lambda x: "".join(x.astype(str)), axis=1)

但是,这也会从空白单元格中连接“NaN”,这显然是不可取的。

我怎样才能得到我想要的输出?

【问题讨论】:

  • df.max(axis=1)
  • @cs95 太棒了!您能否将其添加为答案,以便我接受?
  • 不用担心,您的问题已经被问过,您可以对任何解决方案 here 投赞成票,尽管它们不如 max(axis=1)sum 有用,因为您使用的是数字数据为您提供一些捷径。
  • @cs95 我认为maxsum 更安全(如果有两列包含一个值,出于某种奇怪的原因)这就是为什么我更愿意接受你的建议作为回答。此处提供的链接stackoverflow.com/questions/34989341/… 没有maxsum 作为答案,并且合并了字符串,这就是为什么我相信我的问题足够独特以证明其自己的帖子的合理性。想法?
  • 公平地说,我重新提出了这个问题,因为数据类型有所不同。我已将我的解决方案编辑为下面的答案,您可以接受。如果您仍然想支持我并想了解更多关于 pandas 的信息,我已经写了关于各种主题的文章here

标签: python pandas dataframe numeric


【解决方案1】:

我想这就是你想要的。

import pandas as pd
df = pd.DataFrame({"A":[np.nan, 1, np.nan, np.nan, np.nan],
                   "B": [5, np.nan, 5, np.nan, np.nan]})
df['Z'] = df.sum(axis = 1)

或者,您可以使用

df['Z'] = df.max(axis = 1)

如果(有机会)您有多个非 NULL 值并且只想要其中一个(在这种情况下是最大的),这可能会更安全。

【讨论】:

    猜你喜欢
    • 2020-07-23
    • 2020-02-05
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2019-11-30
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多