如何使用Pandas将含NaN的多行DataFrame转换为单行DataFrame
Pandas合并多行含NaN的DataFrame为单行
针对你给出的DataFrame结构,有两种简单的方法可以实现转换:
方法1:按索引分组取最大值
利用groupby按索引分组后,调用max()方法——该方法会自动忽略NaN值,保留每组内各列的非空值:
import pandas as pd import numpy as np # 构造原始数据 df = pd.DataFrame( { 'a': [1, np.nan, np.nan, np.nan], 'b': [1, np.nan, np.nan, np.nan], 'c': [np.nan, 2, np.nan, np.nan], 'd': [np.nan, 2, np.nan, np.nan], 'e': [np.nan, np.nan, 3, np.nan], 'f': [np.nan, np.nan, 3, np.nan], 'g': [np.nan, np.nan, np.nan, 4], 'h': [np.nan, np.nan, np.nan, 4] }, index=['o', 'o', 'o', 'o'] ) # 执行转换 result = df.groupby(df.index).max() print(result)
方法2:填充空值后取单行
通过ffill()(前向填充)和bfill()(后向填充)将所有NaN补全,再取最后一行即可得到目标单行DataFrame:
result = df.ffill().bfill().iloc[-1:] print(result)
为什么numpy diagonal方法不适用?
你的数据中,每行的非空值是连续的两列(比如第一行是a、b列,第二行是c、d列),并非矩阵的对角线位置,所以numpy.diagonal()无法提取到需要的数值,自然无法实现转换。
内容的提问来源于stack exchange,提问作者박진호
相关产品推荐
相关产品推荐

