简体   繁体   English

如何 pivot 列的值,使用 pandas dataframe 制作新的枚举列

[英]How to pivot a column's values, making new, enumerated columns with pandas dataframe

I have a dataframe like:我有一个 dataframe 像:

    id diag  a_date
0    1   d1      55
1    1   d2      88
2    2   d5      22
3    2   d3      44
4    2   d4      88
5    2   d4      89
6    3   d1      11
7    3   d1      13
8    3   d1      15
9    3   d5      27
10   3   d5      28
11   3   d5      29

df = pd.read_clipboard() # copy the above text and run this to set df

And I want to reshape it so that the diag values become enumerated columns with a_date values like:我想重塑它,使diag值成为具有a_date值的枚举列,例如:

  id d1_1 d1_2 d1_3 d2_1 d3_1 d4_1 d4_2 d5_1 d5_2 d5_3
0  1   55             88                              
1  2                       44   88   89   22          
2  3   11   13   15                       27   28   29

Here is a posible solution.这是一个可行的解决方案。

df = df.sort_values(by=["id", "diag", "a_date"])
df["enumerate"] = df.groupby(["id", "diag"]).cumcount() + 1
df = df.pivot_table(index="id", columns=["diag", "enumerate"], values="a_date").reset_index()

df.columns = [f"{col[0]}_{col[1]}" for col in df.columns]
df = df.drop(columns=["id_"]).fillna("")
print(df)

  d1_1 d1_2 d1_3 d2_1 d3_1 d4_1 d4_2 d5_1 d5_2 d5_3
0   55             88                              
1                       44   88   89   22          
2   11   13   15                       27   28   29

delimiter = '|' _df = df.pivot_table(index=['id'], columns='diag', values=['a_date'], aggfunc=(lambda x: delimiter.join(str(v) for v in x))) _df = _df.droplevel(axis=1, level=0) _df.columns.name = None _df = _df.reset_index() # id d1 d2 d3 d4 d5 # 0 1 55 88 NaN NaN NaN # 1 2 NaN NaN 44 88|89 22 # 2 3 11|13|15 NaN NaN NaN 27|28|29 cols = df.diag.unique().tolist() dfs = [_df.id] for col in cols: _dfX = _df[col].str.split(delimiter, expand=True, regex=False) # regex kwarg pandas>=1.4.0 _dfX.columns = [f'{col}_{c+1}' for c in _dfX.columns] dfs.append(_dfX) df_f = pd.concat(dfs, axis=1).fillna('') # id d1_1 d1_2 d1_3 d2_1 d5_1 d5_2 d5_3 d3_1 d4_1 d4_2 # 0 1 55 88 # 1 2 22 44 88 89 # 2 3 11 13 15 27 28 29

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

相关问题 如何根据数据框中列的值在 Pandas 中创建新列(pivot 或 unpivot ?) - how to create new columns in pandas based on a column's values within a dataframe (pivot or unpivot ? ) Pandas Dataframe 旋转:从列值创建新列 - Pandas Dataframe pivoting: making new columns from column values 如何转动pandas数据框,使多个列中的唯一值成为新列? - How to pivot a pandas dataframe such that unique values across multiple columns become new columns? pivot pandas dataframe 中的一列并创建 4 个新列 - pivot one column in pandas dataframe and create 4 new columns 如何根据列的值对 Pandas 数据框中的列进行分类? - How to classify columns in pandas dataframe based on column's values? 使用时间序列中每个 id 的值列制作一个新的 Pandas 数据框 - Making a new pandas dataframe with columns of the values of each id in a timeseries Pandas:将DataFrame列值转换为新的Dataframe索引和列 - Pandas: Convert DataFrame Column Values Into New Dataframe Indices and Columns 如何在pandas数据透视表中创建一个只有匹配的填充列值的新列? - How can I create a new column in a pandas pivot table with only matching values of populated columns? 如何将值单元格作为pandas数据帧中的新列 - How to cell values as new columns in pandas dataframe 熊猫合并数据框并旋转创建新列 - pandas merge dataframe and pivot creating new columns
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM