我正在尝试基于目标"group-by“列在我的dataframe上使用字符串创建一些聚合。
假设我有以下包含4列的数据帧:

我希望根据列"Col1“对所有行进行分组,在NaN的情况下,使用非null的值进行分组。
期望的输出如下所示:

我也试着使用一个普通的:
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值进行分组...
我该怎么做呢?
谢谢!
发布于 2020-02-11 19:36:04
如果可能,简单地询问每个组的第一个非缺失值,使用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发布于 2020-02-11 23:24:16
使用first()更简洁、更整洁。另一种但不太酷的方法是:
df.replace('', np.nan) \
.groupby('Col1', as_index=False) \
.fillna(method='bfill') \
.groupby('Col1') \
.nth(0)输出:
Col1 Col2 Col3 Col4
A X Y V
B Z D E或者甚至可以使用head()而不是nth()
df.replace('', np.nan) \
.groupby('Col1', as_index=False) \
.fillna(method='bfill') \
.groupby('Col1') \
.head(1) \
.set_index('Col1')输出:
Col1 Col2 Col3 Col4
A X Y V
B Z D E发布于 2020-02-11 19:47:25
只需在已启动的DataFrame上使用df.replace(),即可将其替换为np.nan
df.replace('', np.nan)https://stackoverflow.com/questions/60167900
复制相似问题