更新 Pandas dataframe 列中第二次出现的值

问题描述 投票:0回答:1

我有一个数据集,我想在其中旋转第 2 列和第 3 列。 第 3 列是列名,第 2 列是它的值。 但是对于每个 id,col3 中可能存在重复值。

id col2 col3
1 a
1 e

id
1 a e

举个例子:

df = pd.DataFrame({'id': ['1', '1', '1', '1', '2', '1', '1'],
                   'col2': ['a', 'b', 'c', 'd', 'e', 'f', 'g'],
                   'col3': ['foo', 'bar', 'baz', 'foo', 'bar', 'biz', 'baz']})

由于我们不能在数据框中有 2 个同名的列,我尝试按 id 对它们进行分组并找到第二次出现,然后通过在末尾添加“2”来更新它。

df = pd.DataFrame({'id': ['1', '1', '1', '1', '2', '1', '1'],
                   'col2': ['a', 'b', 'c', 'd', 'e', 'f', 'g'],
                   'col3': ['foo', 'bar', 'baz', 'foo', 'bar', 'biz', 'baz']})

# Find rows with duplicate values in col3 for the same id
duplicated_rows = df[df.duplicated(subset=['id', 'col3'], keep=False)]

# Iterate over each group of duplicated rows and update the second occurrence
for id, group in duplicated_rows.groupby('id'):
    mask = (group.index != group.index[0])  # Select the second occurrence
    df.loc[mask, 'col3'] = df.loc[mask, 'col3'] + '2'  # Update the value by adding '2'

print(df)

但是我得到这个错误: IndexError:布尔索引的长度错误:4 而不是 7

我们如何更新第二次出现? 也感谢任何其他解决方案。

python-3.x pandas dataframe pivot-table
1个回答
0
投票

pivot

out = (
        df.assign(col3=df.groupby(["id", "col3"])
                          .cumcount().add(1).astype(str)
                          .radd("_").radd(df["col3"]))
        .pivot(index="id", columns="col3", values="col2")
        .rename_axis(None, axis=1).reset_index()
      )

输出:

print(out)
​
  id bar_1 baz_1 baz_2 biz_1 foo_1 foo_2
0  1     b     c     g     f     a     d
1  2     e   NaN   NaN   NaN   NaN   NaN
© www.soinside.com 2019 - 2024. All rights reserved.