熊猫重新塑造重复行

2024-04-26 05:16:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用重复行重塑数据帧。数据来自一个csv文件,其中重复数据块。你知道吗

例如:

    Name      1st    2nd
0 Value1      a1     b1 
1 Value2      a2     b2 
2 Value3      a3     b3
3 Value1      a4     b4
4 Value2      a5     b5
5 Value3      a6     b6

应重塑为:

Name     1st 2nd 3rd 4th
Value1   a1  b1  a4  b4
Value2   a2  b2  a5  b5
Value3   a3  b3  a6  b6

你对此有什么建议吗? 我已经看过这个thread,但是我看不到如何将这种方法转化为我的问题,因为groupby所处理的列的右边有多个列。你知道吗


Tags: 数据namea2a1b2a3b1a4
2条回答

在按名称分组后,创建一个具有重复df值的数据帧,并将该df与原始df合并。你知道吗

df1 = df.groupby('Name')['1st', '2nd'].apply(lambda x: x.iloc[1]).reset_index()
df1.columns = ['Name', '3rd', '4th']
df = df.drop_duplicates(subset=['Name']).merge(df1, on = 'Name')

你得到了吗

    Name    1st 2nd 3rd 4th
0   Value1  a1  b1  a4  b4
1   Value2  a2  b2  a5  b5
2   Value3  a3  b3  a6  b6

您可以使用^{}^{}将两列合并为一列,^{}获取新的列标签,^{}进行重塑:

# Stack the 1st and 2nd columns, and use cumcount to get the new column labels.
df = df.set_index('Name').stack().reset_index(level=1, drop=True).to_frame()
df['new_col'] = df.groupby(level='Name').cumcount()

# Perform a pivot to get the desired shape.
df = df.pivot(columns='new_col', values=0)

# Formatting.
df = df.reset_index().rename_axis(None, 1)

结果输出:

     Name   0   1   2   3
0  Value1  a1  b1  a4  b4
1  Value2  a2  b2  a5  b5
2  Value3  a3  b3  a6  b6

相关问题 更多 >