📜  groupby fillna - Python (1)

📅  最后修改于: 2023-12-03 15:31:04.704000             🧑  作者: Mango

Python中的Groupby和Fillna

在数据分析和处理中,经常需要使用groupby和fillna方法对数据进行分组和填充空值。在Python中,groupby和fillna方法非常方便易用,下面将介绍这两个方法的具体使用。

Groupby方法

Groupby方法可以根据指定的列对数据进行分组,常用于统计和聚合操作。在Python中,可以使用pandas库的DataFrame对象的groupby方法进行分组操作,具体使用方法如下:

import pandas as pd

# 创建示例数据
df = pd.DataFrame({
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
    'C': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [9, 10, 11, 12, 13, 14, 15, 16]
})

# 根据'A'列分组,计算'C'的和
grouped = df.groupby('A').sum()['C']
print(grouped)

输出结果为:

A
bar    12
foo    24
Name: C, dtype: int64

上述示例中,首先创建了一个DataFrame对象,包含4列数据。然后通过groupby方法根据'A'列进行分组,计算'C'列的和。最后输出每个分组对应的'C'列和。

Fillna方法

Fillna方法用于填充空值或缺失值。在Python中,可以使用pandas库的DataFrame对象的fillna方法进行填充操作,具体使用方法如下:

import pandas as pd
import numpy as np

# 创建示例数据,包含空值
df = pd.DataFrame({
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'B': ['one', 'one', 'two', 'three', np.nan, 'two', 'one', 'three'],
    'C': [1, np.nan, 3, 4, 5, 6, np.nan, 8],
    'D': [9, 10, 11, np.nan, 13, 14, 15, 16]
})

# 填充空值为0
filled = df.fillna(0)
print(filled)

输出结果为:

     A      B    C     D
0  foo    one  1.0   9.0
1  bar    one  0.0  10.0
2  foo    two  3.0  11.0
3  bar  three  4.0   0.0
4  foo    NaN  5.0  13.0
5  bar    two  6.0  14.0
6  foo    one  0.0  15.0
7  foo  three  8.0  16.0

上述示例中,首先创建了一个DataFrame对象,包含4列数据,其中'B'列和'C'列包含空值。然后通过fillna方法将空值填充为0。最后输出填充后的DataFrame对象。

Groupby和Fillna的结合使用

在实际应用中,通常需要对数据进行分组和填充操作。在Python中,可以使用groupby和fillna方法结合使用来实现这一目的。具体使用方法如下:

import pandas as pd
import numpy as np

# 创建示例数据,包含空值
df = pd.DataFrame({
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'B': ['one', 'one', 'two', 'three', np.nan, 'two', 'one', 'three'],
    'C': [1, np.nan, 3, 4, 5, 6, np.nan, 8],
    'D': [9, 10, 11, np.nan, 13, 14, 15, 16]
})

# 根据'A'列分组,对'C'列和'D'列进行填充
filled = df.groupby('A').apply(lambda group: group.fillna(group.mean())).reset_index(drop=True)
print(filled)

输出结果为:

     A      B         C     D
0  bar    one  5.000000  10.0
1  bar  three  4.000000  12.0
2  bar    two  6.000000  14.0
3  foo    one  1.000000   9.0
4  foo    one  3.333333  12.0
5  foo  three  8.000000  16.0
6  foo    two  3.000000  11.0
7  foo    NaN  5.000000  13.0

上述示例中,首先创建了一个DataFrame对象,包含4列数据,其中'B'列和'C'列包含空值。然后通过groupby方法根据'A'列进行分组,对每个分组中的空值进行填充,填充方法为该分组中'C'列和'D'列的平均值。最后输出填充后的DataFrame对象。