添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

本案例是一个行转列的例子,通常我们在统计数据时,会整理一个一维的序列,因为这样做比较方便,但在数据分析时,可能需要根据标签将这个序列转为多们维度的数据。我们来看如何用 pandas 来处理这个操作。

数据与需求

源数据如下:

import pandas as pd
import io
data = '''
name    value
C   3
E   5
D   4
D   7
E   8
C   6
df = pd.read_csv(io.StringIO(data), delim_whitespace=True)
  name  value
0    C      3
1    E      5
2    D      4
3    D      7
4    E      8
5    C      6

以上数据我们可以认为是一个序列,name 是标签,value 是值,我们需每个标签有两个值,我们要根据 name 的值将数据转为两列,列名分别为 value1 和 value2。效果如:

name value1 value2 0 C 3 6 1 D 4 7 2 E 5 8

我们需要先将数据按 name 先分组,将分组内的 value 转为列表,再对每行应用 pd.Series 会转为按位置对齐的 DataFrame。

最后用 rename 修改一下列名,重置索引即可完成操作。

先分组,再将每组的 value 转为列表:

df.groupby('name') .value.agg(list) C [3, 6] D [4, 7] E [5, 8] Name: value, dtype: object

应用 pd.Series 转为 DataFrame:

df.groupby('name') .value.agg(list) .apply(pd.Series) C 3 6 D 4 7 E 5 8

修改列名,重置索引:

df.groupby('name') .value.agg(list) .apply(pd.Series) .rename(lambda x: f'value{x+1}', axis=1) .reset_index() name value1 value2 0 C 3 6 1 D 4 7 2 E 5 8

这样就实现了需求。

  • pandas 实战案例集 2023-09-01 11:21:28
  • pandas agg() 聚合操作 2022-11-14 11:50:04
  • pandas apply() 按轴应用函数 2022-07-04 23:55:35
  • pandas 索引 Indexing 2022-02-16 23:46:55
  •