【数据分析-24】df数据组合2

继续扩展 DataFrame 数据组合的相关内容,可以进一步探讨如何在实际应用中有效使用这些方法。以下是一些进阶的组合技术和场景,涵盖了更多的数据处理需求。

7. 多个数据框按索引合并(join)

join 方法可以让你基于索引对多个数据框进行合并,除了使用列进行合并外,join 还可以根据行索引来合并数据,这对于有相同索引的多个数据框非常有用。

# 创建数据集
df1 = pd.DataFrame({'A': [1, 2]}, index=['x', 'y'])
df2 = pd.DataFrame({'B': [3, 4]}, index=['y', 'z'])

# 使用索引连接
result = df1.join(df2, how='outer')

结果:

   A    B
x  1  NaN
y  2  3.0
z  NaN  4.0

8. 使用 merge 自定义连接方式

merge 方法在合并数据时,除了支持常见的 innerouterleftright 连接方式外,还可以通过设置 left_onright_on 来指定合并的列,使得合并更加灵活。

# 创建数据集
df1 = pd.DataFrame({'A': [1, 2, 3], 'Key': ['X', 'Y', 'Z']})
df2 = pd.DataFrame({'B': [4, 5, 6], 'Key': ['Z', 'Y', 'X']})

# 根据 'Key' 列进行合并
result = pd.merge(df1, df2, on='Key', how='outer')

结果:

   A Key  B
0  1   X  6
1  2   Y  5
2  3   Z  4

9. 级联操作(Concatenating with Different Indices)

concat 方法在连接多个数据框时,可以根据行或列的不同索引来合并数据。特别地,当索引不一致时,你可以使用 ignore_index=True 重新为新数据框生成索引。

# 创建数据集
df1 = pd.DataFrame({'A': [1, 2]}, index=['x', 'y'])
df2 = pd.DataFrame({'A': [3, 4]}, index=['z', 'w'])

# 按行连接并重置索引
result = pd.concat([df1, df2], ignore_index=True)

结果:

   A
0  1
1  2
2  3
3  4

10. concat 的多层合并(Multi-level Concatenation)

concat 还可以用于合并具有层级结构的多个 DataFrame,例如对多层数据进行拼接,通常使用多层索引(MultiIndex)来处理这类需求。

# 创建数据集
df1 = pd.DataFrame({'A': [1, 2]}, index=['x', 'y'])
df2 = pd.DataFrame({'A': [3, 4]}, index=['z', 'w'])

# 创建多层索引
df1 = df1.set_index([pd.Index(['a', 'b']), df1.index])
df2 = df2.set_index([pd.Index(['c', 'd']), df2.index])

# 按层级合并
result = pd.concat([df1, df2], axis=0)

结果:

     A
a x  1
b y  2
c z  3
d w  4

11. 使用 pivot_table 创建聚合视图

pivot_tablepivot 的增强版,允许你对数据进行聚合操作,并能够对数据进行分组、聚合等多维度的转换。

# 创建数据集
df = pd.DataFrame({
    'Date': ['2021-01-01', '2021-01-01', '2021-01-02'],
    'City': ['A', 'B', 'A'],
    'Temperature': [32, 35, 30],
    'Humidity': [60, 65, 70]
})

# 创建透视表并聚合
pivot_df = df.pivot_table(values='Temperature', index='Date', columns='City', aggfunc='mean')

结果:

City            A     B
Date                   
2021-01-01   32.0  35.0
2021-01-02   30.0   NaN

12. 数据组合与空值处理

在数据合并时,可能会遇到空值(NaN),尤其是当合并的数据框的索引或列不完全对齐时。Pandas 提供了多种处理空值的方法,如填充、删除等。

填充空值
df1 = pd.DataFrame({'A': [1, 2]}, index=['x', 'y'])
df2 = pd.DataFrame({'B': [3, 4]}, index=['y', 'z'])

# 合并并填充空值
result = pd.concat([df1, df2], axis=1).fillna(0)

结果:

   A  B
x  1  0
y  2  3
z  0  4
删除空值
# 合并并删除包含空值的行
result = pd.concat([df1, df2], axis=1).dropna()

结果:

   A  B
y  2  3

13. 多对一合并(Many-to-One Merge)

当合并多个数据集时,如果某些数据框在某些列上有重复项,合并时可能会出现重复数据。可以使用 drop_duplicates 来去除这些重复项。

# 创建数据集
df1 = pd.DataFrame({'key': ['A', 'B', 'A'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [4, 5, 6]})

# 合并并去除重复项
result = pd.merge(df1, df2, on='key').drop_duplicates()

结果:

  key  value_x  value_y
0   A        1        4
1   B        2        5

14. 合并多列与条件组合

可以通过合并多列和设置条件,来实现复杂的数据组合逻辑。

# 创建数据集
df1 = pd.DataFrame({'key1': ['A', 'B'], 'key2': [1, 2], 'value': [10, 20]})
df2 = pd.DataFrame({'key1': ['A', 'B'], 'key2': [1, 2], 'value2': [30, 40]})

# 多列合并
result = pd.merge(df1, df2, on=['key1', 'key2'])

结果:

  key1  key2  value  value2
0    A     1     10      30
1    B     2     20      40

总结

Pandas 中的 DataFrame 数据组合方法,如 concatmergejoinpivot 等,提供了非常灵活和强大的功能,可以帮助我们进行数据整合、清理、聚合和透视等操作。根据实际需求,我们可以选择不同的组合方式,如按行、按列、根据索引、按条件合并等。这些方法在实际数据分析中非常有用,特别是在处理复杂的数据源时,可以极大提升工作效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值