将重复数据从行转换为列

2024-09-30 01:22:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下数据:

name    val trc
jin      23 apb
tim      52 nmq
tim      61 apb
tim      92 rrc
ron      13 apq
stark    34 rrc
stark    34 apq
ron       4 apq
sia       6 wer

我正在寻找如下输出:

name    val_1   trc1    val_2   trc2    val_3   trc3
jin        23   apb             
tim        92   rrc        61   apb        52   nmq
ron        13   apq         4   apq     
stark      34   rrc        34   apq     
sia         6   wer 

我想将行中的重复值转换为列,其中valu 1中的值最大,valu 2中的值较小,以此类推。即使trc1值也应该对应于valu 1。请让我知道如何做到这一点。你知道吗

我试过这种方法:

d = {k: v.reset_index(drop=True) for k, v in df.groupby('name')}
pd.concat(d, axis=1).reset_index()
  index  jin             ron             sia            stark             tim  \
        name   val  trc name   val  trc name  val  trc   name   val  trc name   
0     0  jin  23.0  apb  ron  13.0  apq  sia  6.0  wer  stark  34.0  rrc  tim   
1     1  NaN   NaN  NaN  ron   4.0  apq  NaN  NaN  NaN  stark  34.0  apq  tim   
2     2  NaN   NaN  NaN  NaN   NaN  NaN  NaN  NaN  NaN    NaN   NaN  NaN  tim   

Tags: nameindexvalnantimjinapbwer
3条回答

用途:

df1 = df.sort_values(['name','val'], ascending=False)

df1 = df1.set_index('name').stack().groupby(level=0).apply(list).apply(pd.Series)

df1 = df1.reset_index().fillna("")

print(df1)

   name   0    1    2     3   4   5
0  jin   23  apb                
1  ron   13  apq    4   apq     
2  sia    6  wer                
3  stark 34  rrc   34   apq     
4  tim   92  rrc   61   apb  52  nmq

将对象转换为字典,其中名称作为键,VAL和TRC作为元组或列表中的连接值。你知道吗

你想得到这样的结果:

yourDict[name] = [ [val_1, trc1] , [val_2, trc2] ] 

这里有一个使用pivot的选项:

df['index'] = df.groupby('name').cumcount()
df_vals = df.pivot(index='name', columns='index', values='val').rename(columns=lambda x: 'val_'+str(x))
df_trcs = df.pivot(index='name', columns='index', values='trc').rename(columns=lambda x: 'trc_'+str(x))

df_vals.join(df_trcs).fillna('').reset_index()

index   name    val_0   val_1   val_2   trc_0   trc_1   trc_2
0       jin     23.0                    apb     
1       ron     13.0    4               apq     apq 
2       sia     6.0                     wer     
3       stark   34.0    34              rrc     apq 
4       tim     52.0    61  92          nmq     apb     rrc  

相关问题 更多 >

    热门问题