gpt4 book ai didi

python - 生成新列作为其他列的组合

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:06 25 4
gpt4 key购买 nike

我有一个 DataFrame,它在列中有一个标识符的多个组件,在另一列中有一个与标识符关联的值。我希望能够创建 n 列,以便每一列都是标识参数。

            foo    Type      ID     Index    Value  
25090 x A 0 0 23272000
25090 x A 0 0 23272000
25091 x A 1 0 22896000
25092 x B 0 1 20048000
25093 y A 0 0 19760000
25092 y B 0 1 20823342

我想让它有 n 列 Type_ID_Index 分组(我可以通过 groupby 获得)并且每一列都有各自的值。我希望该值与 foo 相关联。

           foo          A_0_0     A_1_0     B_0_1      
25090 x 23272000 22896000 20048000
25090 x 23272000 22896000 20048000
25091 x 23272000 22896000 20048000
25092 x 23272000 22896000 20048000
25093 y 19760000 21568000 20823342
25092 y 19760000 21568000 20823342

我该如何实现?

最佳答案

从您的示例数据开始

In [3]: df
Out[3]:
foo bar Type ID Index Value

25090 x 9 A 0 0 23272000
25090 x 5 A 0 0 23272000
25091 x 3 A 1 0 22896000
25092 x 3 B 0 1 20048000
25093 y 6 A 0 0 19760000
25092 y 4 B 0 1 20823342

通过按行应用join 连接每一行的标识符。

In [4]: identifier = df[['Type', 'ID', 'Index']].apply(
lambda x: '_'.join(map(str, x)), axis=1)

从您的值列创建一个系列,并通过标识符和 foo 对其进行索引。

In [5]: v = df['Value']

In [6]: v.index = pd.MultiIndex.from_arrays([df['foo'], identifier])

In [7]: v
Out[7]:
foo
x A_0_0 23272000
A_0_0 23272000
A_1_0 22896000
B_0_1 20048000
y A_0_0 19760000
B_0_1 20823342
Name: Value, dtype: int64

将其拆栈,并将其加入“foo”上的原始 DataFrame。

In [8]: df[['foo', 'bar']].join(v.drop_duplicates().unstack(), on='foo')
Out[8]:
foo bar A_0_0 A_1_0 B_0_1

25090 x 9 23272000 22896000 20048000
25090 x 5 23272000 22896000 20048000
25091 x 3 23272000 22896000 20048000
25092 x 3 23272000 22896000 20048000
25093 y 6 19760000 NaN 20823342
25092 y 4 19760000 NaN 20823342

请注意,在取消堆叠之前,我在 v 中删除了重复项。这是必不可少的。如果您在数据集中的任何地方对同一标识符有不同的值,就会遇到麻烦。

要点:您的示例输出中有一行 (25094) 在您的示例输入中缺失。此外,我输出中的 NaN 是有意义的:当 foo='y' 时,A_1_0 没有指定任何值。

关于python - 生成新列作为其他列的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16026216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com