如何合并 Pandas 中包含数字数据的多列,但忽略空单元格
How to merge multiple columns containing numeric data in Pandas, but ignore empty cells
我有一个 table 这样的:
|-----|-----|-----|
| 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”,这显然是不可取的。
我怎样才能得到我想要的输出?
我想这就是你想要的。
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)
如果(偶然)您有多个 non-NULL 值并且只想要其中之一(在本例中为最大的一个),这可能更安全。
我有一个 table 这样的:
|-----|-----|-----|
| 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”,这显然是不可取的。
我怎样才能得到我想要的输出?
我想这就是你想要的。
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)
如果(偶然)您有多个 non-NULL 值并且只想要其中之一(在本例中为最大的一个),这可能更安全。