【Pandas】pandas wide_to_long
Pandas2.2 General
Data manipulations
方法 | 描述 |
---|---|
melt(frame[, id_vars, value_vars, var_name, …]) | 将多个列的值转换为行形式 |
pivot(data, *, columns[, index, values]) | 将长格式的数据转化为宽格式 |
pivot_table(data[, values, index, columns, …]) | 用于创建数据透视表,支持多种聚合操作和复杂的数据处理 |
crosstab(index, columns[, values, rownames, …]) | 用于计算交叉表,支持多种聚合操作和复杂的数据处理 |
cut(x, bins[, right, labels, retbins, …]) | 用于将数值数据分割为离散的区间,可以以标签或是区间范围的形式返回 |
qcut(x, q[, labels, retbins, precision, …]) | 基于排名或样本分位数将变量分段为等大小的桶的分位数离散化函数 |
merge(left, right[, how, on, left_on, …]) | 数据合并操作 |
merge_ordered(left, right[, on, left_on, …]) | 用于在两个 DataFrame 之间进行有序合并 |
merge_asof(left, right[, on, left_on, …]) | 用于在两个 DataFrame 之间进行基于最近匹配的合并 |
concat(objs, *[, axis, join, ignore_index, …]) | 用于在不同 DataFrame 或 Series 之间进行拼接操作 |
get_dummies(data[, prefix, prefix_sep, …]) | 用于将类别变量转换为虚拟变量 |
from_dummies(data[, sep, default_category]) | 用于将虚拟变量转换为类别变量 |
factorize(values[, sort, use_na_sentinel, …]) | 用于将类别变量或对象数组转换为数值型编码 |
unique(values) | 用于返回数据中唯一值的数组 |
lreshape(data, groups[, dropna]) | 用于将宽格式的数据转换为长格式 |
wide_to_long(df, stubnames, i, j[, sep, suffix]) | 用于将宽格式数据重塑为长格式数据 |
pandas.wide_to_long()
pandas.wide_to_long
是 Pandas 库中用于将宽格式数据转换为长格式数据的一个非常有用的函数。以下是该函数每个参数的详细介绍,以及一个示例和结果。
def wide_to_long(
df: DataFrame, stubnames, i, j, sep: str = "", suffix: str = r"\d+"
) -> DataFrame:
...
参数详解
-
df:
- 类型:Pandas DataFrame。
- 说明:包含要转换的宽格式数据的 DataFrame。
-
stubnames:
- 类型:字符串或字符串列表。
- 说明:指定要转换的列名的前缀。这些前缀列名后面通常会跟着一些后缀(如数字或字母),用于区分不同的变量。
wide_to_long
会查找这些前缀相同的列,并将它们转换为长格式数据中的不同观测值。
-
i:
- 类型:字符串或字符串列表。
- 说明:指定用作标识符的列名。这些列的值在转换后的长格式数据中会保持不变,用于唯一标识每个观测值。
-
j:
- 类型:字符串。
- 说明:指定新生成的列的名称。在转换后的长格式数据中,这个名称会用于表示原来的宽格式数据中不同后缀对应的变量。
-
sep:
- 类型:字符串。
- 说明:指定用于分隔
stubnames
和j
的连接符。在转换过程中,这个连接符会从列名中去除。默认为空字符串。
-
suffix:
- 类型:字符串。
- 说明:指定用于捕获后缀的正则表达式。在宽格式数据中,这个正则表达式会用于匹配
stubnames
后面的后缀。默认为'\d+'
,表示一个或多个数字。
示例及结果
以下是一个使用 pandas.wide_to_long
的示例:
import pandas as pd
# 创建一个宽格式的 DataFrame
data = {
'famid': [1, 1, 1, 2, 2, 2, 3, 3, 3],
'birth': [1, 2, 3, 1, 2, 3, 1, 2, 3],
'ht1': [2.8, 2.9, 2.2, 2, 1.8, 1.9, 2.2, 2.3, 2.1],
'ht2': [3.4, 3.8, 2.9, 3.2, 2.8, 2.4, 3.3, 3.4, 2.9]
}
df = pd.DataFrame(data)
# 使用 wide_to_long 函数将宽格式数据转换为长格式数据
l = pd.wide_to_long(df, stubnames=['ht'], i=['famid', 'birth'], j='age')
# 打印转换后的长格式数据
print(l)
输出结果:
famid birth age
1 1 1 2.8
2 3.4
2 1 2.9
2 3.8
3 1 2.2
2 2.9
2 1 1 2.0
2 3.2
2 1 1.8
2 2.8
3 1 1.9
2 2.4
3 1 1 2.2
2 3.3
2 1 2.3
2 3.4
3 1 2.1
2 2.9