首页 > 解决方案 > Pandas - 基于列对行进行分组并用非空值替换 NaN

问题描述

我正在尝试根据目标“分组依据”列在我的数据帧上创建一些带有字符串的聚合。

想象一下,我有以下包含 4 列的数据框:

在此处输入图像描述

我想根据列“Col1”对所有行进行分组,在这种情况下,o NaN 组的值不为空。

所需的输出是这样的:

在此处输入图像描述

我也尝试使用普通的:

import pandas as pd
from tabulate import tabulate

df = pd.DataFrame({'Col1': ['A', 'B', 'A'],
                   'Col2': ['X', 'Z', 'X'],
                   'Col3': ['Y', 'D', ''],
                   'Col4': ['', 'E', 'V'],})

print(tabulate(df, headers='keys', tablefmt='psql'))
df2 = df.groupby(['Col1'])
print(tabulate(df2, headers='keys', tablefmt='psql'))

但它不会对 NaN 值进行分组......

我怎样才能做到这一点?

谢谢!

标签: pythonpandaspandas-groupby

解决方案


如果可能,只需询问每个组的第一个非缺失值,请使用GroupBy.first

df = pd.DataFrame({'Col1': ['A', 'B', 'A'],
                   'Col2': ['X', 'Z', 'X'],
                   'Col3': ['Y', 'D', np.nan],
                   'Col4': [np.nan, 'E', 'V'],})


df2 = df.groupby(['Col1'], as_index=False).first()
print (df2)
  Col1 Col2 Col3 Col4
0    A    X    Y    V
1    B    Z    D    E

推荐阅读