繁体   English   中英

根据其他列 id 值创建一个新列 - Pandas

[英]Make a new column based on other columns id values - Pandas

如何根据其他列 id 值创建新列?

数据看起来像这样。

value       id
551        54089
12         54089
99         54089
55         73516
123        73516
431        73516
742        74237
444        74237
234        74237

我希望数据集看起来像这样。

         v1     v2    v3
54089   551     12    99
73516   55      123   431
74237   742     444   234

groupbyunstack一起使用:

df = df.groupby('id')['value'].apply(lambda x: pd.Series(x.tolist(), 
                                                         index=['v1', 'v2', 'v3']))\
                              .unstack()
# or

df.groupby('id')['value'].apply(lambda x: pd.DataFrame(x.tolist(), 
                                                       index=['v1', 'v2', 'v3']).T)

print(df)
        v1   v2   v3
id                  
54089  551   12   99
73516   55  123  431
74237  742  444  234

如果你有超过 3 个值,你可以创建一个小助手,它适应你的 Z6A8064B5DF4794555500553C47C55057DZ 的大小。

import pandas as pd
import numpy as np


#Dummy Dataframe
 np.random.seed(2016)
 df = pd.DataFrame({'id': 
[54089, 54089, 54089, 73516, 73516, 73516, 73516, 74237, 74237,74237],
                    'value': np.random.randint(1, 100, 10)})
#Create group
grp = df.groupby('id')

#Create helper column 
 df['ID_Count'] = grp['value'].cumcount() + 1

 #Pivot dataframe using helper column and add 'value' column to pivoted output.
 df_out = df.pivot('id','ID_Count','value').add_prefix('v')

在此处输入图像描述

除了已经提供的出色答案之外:

(df.astype({'value':str})
 .groupby('id')
 .agg(','.join)
 .value.str.split(',',expand=True)
 .set_axis(['v1','v2','v3'],axis=1)
 .astype(int)
)

        v1  v2  v3
id          
54089   551 12  99
73516   55  123 431
74237   742 444 234

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM