使用时间序列中每个 id 的值的列创建一个新的 pandas 数据框

假设我有一个如下所示的 DataFrame:


            timestamp    id  value

0 2020-09-27 10:00:00     a     10

0 2020-09-27 10:00:00     b     13

0 2020-09-27 10:00:00     c     16

0 2020-09-27 10:01:00     a     11

0 2020-09-27 10:01:00     b     14

0 2020-09-27 10:01:00     c     17

0 2020-09-27 10:02:00     a     12

0 2020-09-27 10:02:00     b     15

我想创建一个新的 DataFrame,其中包含特定时间戳处每个 id 的值的列。


                            a    b    c

2020-09-27 10:00:00        10   13   16

2020-09-27 10:01:00        11   14   17

2020-09-27 10:02:00        12   15  NaN

我尝试过以下方法:


df2 = pd.DataFrame(df['timestamp'].unique())

for unique in df['id'].unique():

    df2 = df2.join(df[df['id']==unique]['value'])

    df2.rename(columns={"value": unique})

但是,我收到以下错误:ValueError: columns overlap but no suffix specified: Index(['value'], dtype='object')


有人可以解释一下出了什么问题和/或获得结果的更好方法是什么吗?


慕尼黑8549860
浏览 95回答 2
2回答

胡子哥哥

您可以使用 df.pivotdf.pivot(index=['timestamp'], columns = ['id'], values = ['value']).reset_index()

郎朗坤

您可以使用df.pivot_table():In [798]: df.pivot_table(values = 'value', index='timestamp', columns = 'id').reset_index()Out[798]: id            timestamp     a     b     c0   2020-09-27 10:00:00  10.0  13.0  16.01   2020-09-27 10:01:00  11.0  14.0  17.02   2020-09-27 10:02:00  12.0  15.0   NaN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python