Python案例如何用Pandas做数据索引交叉

wen python案例 1

本文目录导读:

Python案例如何用Pandas做数据索引交叉

  1. 基础索引交叉示例
  2. 使用 loc[] 进行标签索引交叉
  3. 使用 iloc[] 进行位置索引交叉
  4. ix[] (已废弃,但了解)
  5. 使用 xs() 进行交叉选择
  6. 实际应用案例
  7. 高级索引交叉技巧
  8. 实用技巧总结

我来给你详细介绍Python Pandas中数据索引交叉的几种常用方法。

基础索引交叉示例

准备数据

import pandas as pd
import numpy as np
# 创建示例数据集
df1 = pd.DataFrame({
    'A': range(1, 6),
    'B': range(10, 60, 10)
}, index=['a', 'b', 'c', 'd', 'e'])
df2 = pd.DataFrame({
    'A': range(3, 8),
    'C': range(30, 80, 10)
}, index=['c', 'd', 'e', 'f', 'g'])
print("df1:")
print(df1)
print("\ndf2:")
print(df2)

使用 loc[] 进行标签索引交叉

# 使用 loc[] 进行标签索引交叉
index_intersection = df1.index.intersection(df2.index)
result = df1.loc[index_intersection]
print("索引交叉结果:")
print(result)
# 具体值索引交叉
result_lc = df1.loc[['a', 'c', 'e'], ['A']]
print("\n具体行和列的交叉选择:")
print(result_lc)

使用 iloc[] 进行位置索引交叉

# 使用整数位置进行索引交叉
result_iloc = df1.iloc[0:3, 0:1]  # 前3行,第1列
print("位置索引交叉:")
print(result_iloc)

ix[] (已废弃,但了解)

# 注意:ix[] 在较新版本中已废弃,推荐使用 loc[] 和 iloc[]
# 旧版本中可以使用
# result_ix = df1.ix[['a', 'c'], ['A']]

使用 xs() 进行交叉选择

# 创建多层索引数据
arrays = [
    ['A', 'A', 'B', 'B', 'C', 'C'],
    ['x', 'y', 'x', 'y', 'x', 'y']
]
index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])
multi_df = pd.DataFrame({
    'value1': range(10, 70, 10),
    'value2': range(100, 160, 10)
}, index=index)
print("多层索引DataFrame:")
print(multi_df)
print()
# 使用 xs() 进行索引交叉
result_xs = multi_df.xs(key='A', level='first')
print("选择 first='A' 的所有数据:")
print(result_xs)
# 交叉选择特定值
result_xs2 = multi_df.xs(key=('A', 'x'))
print("\n选择 first='A', second='x' 的数据:")
print(result_xs2)

实际应用案例

# 更实际的案例 - 销售数据分析
# 创建销售数据
sales_data = {
    'date': pd.date_range('2024-01-01', periods=10, freq='D'),
    'product': ['A', 'B', 'A', 'C', 'B', 'A', 'C', 'B', 'A', 'C'],
    'sales': [100, 150, 120, 180, 130, 110, 200, 160, 90, 175],
    'quantity': [10, 15, 12, 18, 13, 11, 20, 16, 9, 17]
}
df_sales = pd.DataFrame(sales_data)
df_sales.set_index('date', inplace=True)
print("销售数据:")
print(df_sales)
print()
# 索引交叉分析
# 选择特定日期范围
date_range = pd.date_range('2024-01-03', '2024-01-07')
sales_period = df_sales.loc[date_range]
print("特定日期的销售数据:")
print(sales_period)
print()
# 选择特定产品在特定日期范围的数据
product_A_sales = df_sales.loc[
    (df_sales.index >= '2024-01-03') & 
    (df_sales.index <= '2024-01-07') & 
    (df_sales['product'] == 'A')
]
print("产品A在特定日期范围的销售:")
print(product_A_sales)

高级索引交叉技巧

# 条件索引交叉
# 创建更多数据
df_high = pd.DataFrame({
    'score': np.random.randint(60, 100, 10)
}, index=pd.date_range('2024-01-01', periods=10, freq='D'))
print("成绩数据:")
print(df_high)
print()
# 布尔索引交叉
high_scores = df_high[df_high['score'] > 80]
print("成绩 > 80 的数据:")
print(high_scores)
print()
# 多条件交叉
combined_condition = df_high[
    (df_high['score'] > 70) & 
    (df_high.index >= '2024-01-05')
]
print("综合条件筛选:")
print(combined_condition)

实用技巧总结

# 索引交叉常用方法
# 1. 找出共同索引
common_index = df1.index & df2.index
print("共同索引:", common_index)
# 2. 找出不同索引
diff_index = df1.index ^ df2.index
print("不同索引:", diff_index)
# 3. 合并索引
union_index = df1.index | df2.index
print("合并索引:", union_index)
# 4. 使用 query() 方法
result_query = df_sales.query('sales > 150 & quantity > 15')
print("\n使用query筛选:")
print(result_query)
# 5. 动态索引交叉
def dynamic_index_cross(df, start_date, end_date, conditions=None):
    """
    动态索引交叉函数
    """
    mask = (df.index >= start_date) & (df.index <= end_date)
    if conditions:
        for col, value in conditions.items():
            mask &= (df[col] == value)
    return df[mask]
# 使用示例
result_dynamic = dynamic_index_cross(
    df_sales, 
    '2024-01-05', 
    '2024-01-10',
    {'product': 'B'}
)
print("\n动态索引交叉结果:")
print(result_dynamic)
  1. loc[]:基于标签索引
  2. iloc[]:基于整数位置索引
  3. xs():处理多层索引
  4. 布尔索引:条件筛选
  5. 索引运算:&, |, ^ 进行索引操作

这些方法在实际数据分析中非常实用,可以根据具体需求选择合适的方法。

抱歉,评论功能暂时关闭!