【问题标题】:pandas dataframe group rows based on specific column [duplicate]熊猫数据框根据特定列对行进行分组[重复]
【发布时间】:2018-12-13 10:15:27
【问题描述】:

我有一个如下所示的表格:

   P_id   S_id   Time
1  20     A    15 
2  30     B    50
3  50     A    99 
4  70     A    60

我想根据“Sid”列对表格进行分组,并按“时间”列排序,所以它看起来像这样:

     P_id       S_id   
1  20,70,50       A     
2    30           B    

最好的方法是什么?

【问题讨论】:

  • 结果的P_id列中的99是哪里来的?
  • 在预期输出的 P_id 列中应该是 50 而不是 99。
  • 使用df = df.sort_values('Time') .groupby('S_id', sort=False)['P_id'].agg(lambda x: ','.join(x.astype(str))).reset_index()

标签: python pandas dataframe data-munging


【解决方案1】:

你可以试试这个。 df 这里是你的数据框的名字

import pandas as pd
df2 = pd.DataFrame({'S_id': ['A', 'B']})
df2.loc[:,'P_id'] = ''
for letter in df2.S_id.unique():
    indx = df2.loc[df2['S_id']==letter].index.values
    df1 = df.sort_values(by = ['S_id' ,'Time'])
    array_values = list(df1[df1.S_id ==letter].P_id.values)#.astype(object)
    df2.at[indx[0], 'P_id'] = array_values
df2

【讨论】:

  • 是否可以在生成该表的 SQL 查询中执行此操作? (从T中选择P_ids、S_id、时间)
  • @oren_isp ,我相信你可以在 SQL 中做到这一点。不确定您建议的命令是否有效
猜你喜欢
  • 1970-01-01
  • 2019-01-29
  • 2013-07-30
  • 2017-12-13
  • 2012-06-19
  • 1970-01-01
  • 2014-12-29
  • 2021-05-14
  • 2021-11-02
相关资源
最近更新 更多