首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NaN -基于列对行进行分组,并将Pandas替换为非空值

NaN -基于列对行进行分组,并将Pandas替换为非空值
EN

Stack Overflow用户
提问于 2020-02-11 19:32:21
回答 3查看 605关注 0票数 2

我正在尝试基于目标"group-by“列在我的dataframe上使用字符串创建一些聚合。

假设我有以下包含4列的数据帧:

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

期望的输出如下所示:

我也试着使用一个普通的:

代码语言:javascript
复制
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值进行分组...

我该怎么做呢?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-11 19:36:04

如果可能,简单地询问每个组的第一个非缺失值,使用GroupBy.first

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2020-02-11 23:24:16

使用first()更简洁、更整洁。另一种但不太酷的方法是:

代码语言:javascript
复制
df.replace('', np.nan) \
.groupby('Col1', as_index=False) \
.fillna(method='bfill') \
.groupby('Col1') \
.nth(0)

输出:

代码语言:javascript
复制
Col1    Col2    Col3    Col4
A   X   Y   V
B   Z   D   E

或者甚至可以使用head()而不是nth()

代码语言:javascript
复制
df.replace('', np.nan) \
.groupby('Col1', as_index=False) \
.fillna(method='bfill') \
.groupby('Col1') \
.head(1) \ 
.set_index('Col1')

输出:

代码语言:javascript
复制
Col1    Col2    Col3    Col4
A   X   Y   V
B   Z   D   E
票数 0
EN

Stack Overflow用户

发布于 2020-02-11 19:47:25

只需在已启动的DataFrame上使用df.replace(),即可将其替换为np.nan

代码语言:javascript
复制
df.replace('', np.nan)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60167900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档