在数据分析中,经常需要通过比较具有共同变量值的不同行来创建新变量。这通常涉及到数据的分组和聚合操作。以下是一些常见的方法和示例代码:
假设我们有一个数据框 df
,包含以下列:ID
, Category
, Value
。我们希望创建一个新变量 Diff_Value
,表示同一 Category
内相邻两行的 Value
差值。
import pandas as pd
# 创建示例数据框
data = {
'ID': [1, 2, 3, 4, 5],
'Category': ['A', 'A', 'B', 'B', 'C'],
'Value': [10, 15, 20, 25, 30]
}
df = pd.DataFrame(data)
# 按 Category 分组,并计算相邻行的 Value 差值
df['Diff_Value'] = df.groupby('Category')['Value'].diff()
print(df)
ID Category Value Diff_Value
0 1 A 10 NaN
1 2 A 15 5.0
2 3 B 20 NaN
3 4 B 25 5.0
4 5 C 30 NaN
groupby('Category')
将数据按 Category
列的值进行分组。diff()
函数计算每组内相邻行的 Value
差值。第一行的差值默认为 NaN
,因为没有前一行数据与之比较。如果数据中存在缺失值,直接使用 diff()
可能会导致错误。可以通过填充缺失值或使用条件逻辑来处理。
# 填充缺失值
df['Value'].fillna(method='ffill', inplace=True)
# 重新计算差值
df['Diff_Value'] = df.groupby('Category')['Value'].diff()
有时需要更复杂的聚合逻辑,可以使用 apply()
函数自定义聚合函数。
def custom_agg(group):
group['Custom_Value'] = group['Value'].max() - group['Value'].min()
return group
df = df.groupby('Category').apply(custom_agg).reset_index(drop=True)
通过这些方法,可以灵活地创建新变量,满足不同的数据分析需求。
领取专属 10元无门槛券
手把手带您无忧上云