【问题标题】:Make a new column based on other columns id values - Pandas根据其他列 id 值创建一个新列 - Pandas
【发布时间】:2020-08-18 05:15:22
【问题描述】:
如何根据其他列的 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
【问题讨论】:
标签:
python
pandas
dataset
【解决方案1】:
将groupby 与unstack 一起使用:
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
【解决方案2】:
如果您有 3 个以上的值,您可以创建一个小助手,以适应您的数据框的大小。
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')
【解决方案3】:
已经提供的优秀答案的补充:
(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