在数据框的列内对列表的值进行排序

阿曼·辛格|

我有一个数据框为df

   info      task                                               timestamp  
0  foo       ABC                                           ['2016-04-30']  
1  bar       DEF ['2016-01-31', '2015-06-30', '2016-06-30', '2016-08-31']  
2  bar       GHI               ['2015-12-31', '2016-08-31', '2016-05-31']  
3  foo       JKL                                           ['2017-03-31']  
4  foo       XYZ               ['2016-02-29', '2015-10-31', '2016-01-31']  

我想对时间戳列中的日期进行排序请注意,时间戳列中的值在列表中,并且为字符串类型。

所需的输出:

   info      task                                               timestamp  
0  foo       ABC                                           ['2016-04-30']  
1  bar       DEF ['2015-06-30', '2016-01-31', '2016-06-30', '2016-08-31']  
2  bar       GHI               ['2015-12-31', '2016-05-31', '2016-08-31']  
3  foo       JKL                                           ['2017-03-31']  
4  foo       XYZ               ['2015-10-31', '2016-01-31', '2016-02-29'] 
cs95

因此,显而易见的答案是在apply(sorted)这里打电话,但我将继续进行切线,因为在数据结构方面存在根本缺陷。

让我们先整理数据。

df

  info task                                         timestamp
0  foo  ABC                                      [2016-04-30]
1  bar  DEF  [2016-01-31, 2015-06-30, 2016-06-30, 2016-08-31]
2  bar  GHI              [2015-12-31, 2016-08-31, 2016-05-31]
3  foo  JKL                                      [2017-03-31]
4  foo  XYZ              [2016-02-29, 2015-10-31, 2016-01-31]
v = df.values
i = v[:, :-1].repeat(df.timestamp.str.len(), axis=0)
j = np.concatenate(v[:, -1]).reshape(-1, 1)

df = pd.DataFrame(np.hstack((i, j)), columns=df.columns)

   info task   timestamp
0   foo  ABC  2016-04-30
1   bar  DEF  2016-01-31
2   bar  DEF  2015-06-30
3   bar  DEF  2016-06-30
4   bar  DEF  2016-08-31
5   bar  GHI  2015-12-31
6   bar  GHI  2016-08-31
7   bar  GHI  2016-05-31
8   foo  JKL  2017-03-31
9   foo  XYZ  2016-02-29
10  foo  XYZ  2015-10-31
11  foo  XYZ  2016-01-31

现在,groupby在前两列中调用sort_values-

df.groupby(['info', 'task'], sort=False)\
  .timestamp\
  .apply(pd.Series.sort_values)\
  .reset_index(level=[0, 1])

   info task   timestamp
0   foo  ABC  2016-04-30
2   bar  DEF  2015-06-30
1   bar  DEF  2016-01-31
3   bar  DEF  2016-06-30
4   bar  DEF  2016-08-31
5   bar  GHI  2015-12-31
7   bar  GHI  2016-05-31
6   bar  GHI  2016-08-31
8   foo  JKL  2017-03-31
10  foo  XYZ  2015-10-31
11  foo  XYZ  2016-01-31
9   foo  XYZ  2016-02-29

仍然需要申请,但我想打赌会更快,尤其是考虑到您的其他操作可能不再需要apply了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过在数据框R中创建列值列表来对列值进行分组

如何按每个数据框中的列值对列表中的数据框进行排序?

在数据框中按条件对值进行排序

如何在数据框的列中对元组进行排序

如何根据不在数据框中使用 if 条件的值对 14 列进行排序,而不是按行排序?

在数据框中按多列分组的值排序

根据列的值和另一列中列表的长度对数据框进行排序

按 R 中的最小列值对数据框列表进行排序

如何通过列表中的值对数据框进行排序

根据列值对pyspark数据框进行排序

对R中的数据框进行排序(基于列值)

数据框对列进行排序并删除重复的值

对pandas数据框中的多个文本列的值进行排序

根据分类列的值对熊猫数据框进行排序

根据列表对列进行排序,然后对数据框中的另一列进行排序

R在数据帧列表的每个数据帧中按字母顺序对列进行排序

在数据框中对具有数组的列进行排序

根据列类对列表内的数据框进行子集

从包含列表作为列值的数据框中进行绘图

根据列表对熊猫数据框进行排序

比较数据框列内的嵌套列表值

R:在数据框中查找列列表的最大值/最小值

在数据框列的逗号分隔列表中删除值并计算其他值

合并数据框而不对值进行排序

转换包含在数据框行值内的列表

在数据框中对值进行排序,但将具有相同值的项目的顺序随机化

使用参考列在数据框中的行值之间进行选择?

在数据框列中找到字典的值并对其进行修改

根据另一列的值在数据框的列上应用函数,然后进行分组