我有一个数据框,其中每个用户在我的网站上加入并进行购买的行。
为了实现这个目标,我正在尝试:
+---+-----+--------------------+---------+--------+-----+
| | uid | msg | _time | gender | age |
+---+-----+--------------------+---------+--------+-----+
| 0 | 1 | confirmed_settings | 1/29/15 | M | 37 |
| 1 | 1 | sale | 4/13/15 | M | 37 |
| 2 | 3 | confirmed_settings | 4/19/15 | M | 35 |
| 3 | 4 | confirmed_settings | 2/21/15 | M | 21 |
| 4 | 5 | confirmed_settings | 3/28/15 | M | 18 |
| 5 | 4 | sale | 3/15/15 | M | 21 |
+---+-----+--------------------+---------+--------+-----+
我希望更改数据框,使每个uid的行都是唯一的,并且有名为sale
和confirmed_settings
的列,其中包含操作的时间戳。请注意,不是每个用户都有sale
,但每个用户都有confirmed_settings
。如下所示:
+---+-----+--------------------+---------+---------+--------+-----+
| | uid | confirmed_settings | sale | _time | gender | age |
+---+-----+--------------------+---------+---------+--------+-----+
| 0 | 1 | 1/29/15 | 4/13/15 | 1/29/15 | M | 37 |
| 1 | 3 | 4/19/15 | null | 4/19/15 | M | 35 |
| 2 | 4 | 2/21/15 | 3/15/15 | 2/21/15 | M | 21 |
| 3 | 5 | 3/28/15 | null | 3/28/15 | M | 18 |
+---+-----+--------------------+---------+---------+--------+-----+
为了实现这个目标,我正在尝试:
df1 = df.pivot(index='uid', columns='msg', values='_time').reset_index()
df1 = df1.merge(df[['uid', 'gender', 'age']].drop_duplicates(), on='uid')
但是我遇到了这个错误:ValueError:索引包含重复条目,无法重新塑造
当我的数据框具有重复的索引值时,如何进行数据透视以转换数据框?
编辑:
df1 = df.pivot_table(index='uid', columns='msg', values='_time').reset_index()
出现了这个错误 DataError:没有可聚合的数字类型
,但我甚至不确定这是否是正确的路径。
df['uid'] = df['uid'].astype(int)
。 - Benjamin Rowell