如何按ID扁平化分组的Pandas DF列?

disho6za  于 2022-12-25  发布在  其他
关注(0)|答案(2)|浏览(318)

我有以下Pandas Dataframe (具有相同ID的行数总是相同的):

ID  VALUE
---------
1   11
1   12
2   21
2   22
3   31
3   32

我想得到一个扁平的版本,其中每个ID有一行N列,各自的值属于ID的值列(按顺序),如下所示:

ID  v1  v2
----------
1   11  12
2   21  22
3   31  32

我怎样才能得到想要的结果与Pandas?

4bbkushb

4bbkushb1#

我希望这对您有所帮助:

df["tmp"] = df.groupby("ID").cumcount() + 1
df = df.pivot(index="ID", columns="tmp").reset_index()
df.columns = [f"{t}_{n}" for t, n in df.columns]

输出:

ID_  VALUE_1  VALUE_2
0   1       11       12
1   2       21       22
2   3       31       32

无论您的ID是什么,重复该脚本都会创建一个后缀为_number的新clomun

fykwrbwg

fykwrbwg2#

示例

data = {'ID': {0: '1', 1: '1', 2: '2', 3: '2', 4: '3', 5: '3'},
        'VALUE': {0: 11, 1: 12, 2: 21, 3: 22, 4: 31, 5: 32}}
df = pd.DataFrame(data)

第一个月

ID  VALUE
0   1   11
1   1   12
2   2   21
3   2   22
4   3   31
5   3   32

代码

out = (df.groupby('ID')['VALUE']
       .apply(lambda x: pd.Series(list(x)))
       .unstack().rename(columns=lambda x: f'v{x+1}'))

out

v1  v2
ID      
1   11  12
2   21  22
3   31  32

相关问题