给定每列具有 nan 值,如何将多个数据框列合并为一个

尤金·津德

我有一个名为“main_df”的数据框,它包含 3 列 X、Y、Z。

X        Y       Z
NaN      NaN     ZVal1
NaN      NaN     ZVal2
XVal1    NaN     NaN
NaN      YVal1   NaN

每列都携带特定类型 (X,Y,Z) 的数据,因此如果特定行的 X 列中有数据,则 Y/Z 列中将没有数据,因为它不是 X 类型。

如果您将所有 3 列组合在一起,它们会整齐地“相互滑动”,并且您将一路向下获得值。

如何将这 3 列组合成第 4 列,以便忽略 NaN 值,而我们只获得该行的 3 列中存在的任何单个值?

预期输出:

X        Y       Z           XYZ
NaN      NaN     ZVal1       ZVal1
NaN      NaN     ZVal2       ZVal2
XVal1    NaN     NaN         XVal1    
NaN      YVal1   NaN         YVal1   

数据框代码:

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(columns=['X', 'Y', 'Z'], data=[[np.NaN, np.NaN, 'ZVal1'], [np.NaN, np.NaN, 'ZVal2'], ['XVal1', np.NaN, np.NaN], [np.NaN,'YVal1' ,np.NaN]])

现在我正试图做一些事情:

df['XYZ'] = df['X'].astype(str) + df['Y'].astype(str) + df['Z'].astype(str) 但将 NaN 值合并为一个长字符串

穆斯塔法·艾丁

stack

df["XYZ"] = df.stack().values

要得到

>>> df

       X      Y      Z    XYZ
0    NaN    NaN  ZVal1  ZVal1
1    NaN    NaN  ZVal2  ZVal2
2  XVal1    NaN    NaN  XVal1
3    NaN  YVal1    NaN  YVal1

因为你保证每行只有 1 个非 NaN 并且stack默认丢弃 NaN。


花哨索引的另一种方式:

df["XYZ"] = df.to_numpy()[np.arange(len(df)),
                          df.columns.get_indexer(df.notna().idxmax(axis=1))]

对于每一行,它查看非 NaN 值的索引并选择它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将多个数据框日期列合并为R中的一个堆叠日期列

熊猫根据具有不同列标题的另一个数据框将多个列和行值设置为nan

熊猫根据另一个数据框将多个列和行值设置为nan

如何将一个数据框列与一个列表中的多个数据框合并?

如何将一列从两个数据框连接到另一个数据框?pd.merge返回nan

使用 for 循环将多个数据框列合并为一个

如何删除熊猫数据框中的NaN值,该列的列在另一个数据框中被引用为表示缺少或未知值的编码值

如何将数据框行合并为单个行,并为每一列浓缩所有行值?

当重复的行具有不同的值时,如何将重复的行合并为一个数据帧

如何将一个熊猫数据框中的多列合并为一个系列?

熊猫:如何将多个列值与另一个数据框匹配并生成输出

R将两行合并为一个数据框中的多列

数据框列到另一个数据框列的总和 Python 给出 NaN

将基于三列匹配值的多个数据框合并为单个数据框

在熊猫数据框中显示具有一个或多个NaN值的行

通过比较列,用来自另一个数据框列的值填充 NaN

如何将一个数据框列直接转换为以列值作为列索引的数据框?

如何将列从一个数据框合并到另一个数据框

Python:具有多个标题的 CSV 文件 - 合并为一个数据框?

如何将两个或多个列合并为一个?

如何将4列数据合并为一个列?

如何将一个数据框的单列中的值映射到另一个数据框的两列并提取映射的值?

将 Pandas 数据框列合并为 1 列并忽略 NaN

如何将多个日期列合并为一个大熊猫?

如何将列值从一个数据框中提取到另一个?

大熊猫使用另一个数据框列在数据框列中填充NaN

如何合并具有一组公共列值的多个数据框值?

Python:如何查找一列中的哪些值在另一特定列(数据框)中具有NaN值

向数据框添加新列会插入一个NaN值,而不是所需的值