python pandas 数据框:基于值的单列到多列

python pandas data frame: single column to multiple columns based on values

我是 pandas 的新手。 我正在尝试使用 Groupby 根据索引值将单列拆分为多列。下面是写的程序。

import pandas as pd
data = [(0,1.1),
        (1,1.2),
        (2,1.3),
        (0,2.1),
        (1,2.2),
        (0,3.1),
        (1,3.2),
        (2,3.3),
        (3,3.4)]
df = pd.DataFrame(data, columns=['ID','test_data'])
df = df.groupby('ID',sort=True).apply(lambda g: pd.Series(g['test_data'].values))

print(df)
df=df.unstack(level=-1).rename(columns=lambda x: 'test_data%s' %x)
print(df)

我必须使用 unstack(level=-1) 因为当我们的列大小不均匀时,追星族和系列存储结果如下所示。

ID   
0   0    1.1
    1    2.1
    2    3.1
1   0    1.2
    1    2.2
    2    3.2
2   0    1.3
    1    3.3
3   0    3.4
dtype: float64

拆叠后得到的最终结果如下

    test_data0  test_data1  test_data2
ID                                    
0          1.1         2.1         3.1
1          1.2         2.2         3.2
2          1.3         3.3         NaN
3          3.4         NaN         NaN

但我期待的是

   test_data0 test_data1  test_data2
ID                                  
0         1.1        2.1           3.1
1         1.2        2.2           3.2
2         1.3        NAN           3.3
3         NAN        NAN           3.4

让我知道除了 groupby 之外是否还有更好的方法。

如果您的数据框按您显示的那样排序,这将起作用

df['num_zeros_seen'] = df['ID'].eq(0).cumsum()

#reshape the table
df = df.pivot(
    index='ID',
    columns='num_zeros_seen',
    values='test_data',
)

print(df)

输出:

num_zeros_seen    1    2    3
ID                           
0               1.1  2.1  3.1
1               1.2  2.2  3.2
2               1.3  NaN  3.3
3               NaN  NaN  3.4