我有一个熊猫数据框,其中有几个唯一的ID和文本。我试图结合按日期排序的文本。
+-----------+---------------------+------+
| unique_id | date | data |
+-----------+---------------------+------+
| 1 | 2010-05-19 21:30:27 | a |
+-----------+---------------------+------+
| 1 | | b |
| | 2010-05-21 01:36:23 | |
+-----------+---------------------+------+
| 1 | | c |
| | 2010-05-23 06:46:23 | |
+-----------+---------------------+------+
理想情况下,我正在尝试将数据中的行组合到按日期排序的列表中。
类似这样的东西:
+-----------+------------------------------------------------------------------+-----------+
| unique_id | date | data |
+-----------+------------------------------------------------------------------+-----------+
| 1 | [2010-05-19 21:30:27, 2010-05-21 01:36:23, 2010-05-23 06:46:23] | [a, b, c] |
+-----------+------------------------------------------------------------------+-----------+
我目前正在按日期对数据框进行排序,然后使用分组依据对元素进行排序,如下所示:
df['date'] = pd.to_datetime(df['date'])
df = df.sort('date')
df = df.groupby(['unique_id']).agg(lambda x: set(tuple(x))).applymap(list).reset_index()
但是,在分组时,不会保留数据的顺序。
答案 0 :(得分:0)
在这里:
df_tmp = df.groupby('unique_id', as_index=False).agg(lambda x: sorted(set(x)))
答案 1 :(得分:0)
这里是unique
中的pandas
df.groupby('unique_id',sort=False).agg(lambda x : x.unique().tolist())
答案 2 :(得分:0)
您set
中的.agg
不保留顺序-如果您需要删除重复项,则可以执行以下操作:
df2 = df.drop_duplicates(['unique_id', 'date']).sort_values('date').groupby('unique_id').agg(list)