python - 使用 Pandas 根据 groupby 将一列拆分为多个
问题描述
我刚刚开始使用 Python,但遇到了一个与我正在使用的数据集相关的问题。
我有以下数据集:
C1 C2 C3 C4 C5 C6
99 069 99002068 3348117 3230802 T6
99 069 99002063 4599974 178885 T4
99 069 99002063 4599974 4606066 T4
99 069 99002063 4599974 236346 T4
99 069 99002063 4599974 310114 T4
我需要根据列 C1、C2、C3、C4、C6 的分组将 C5 列转置为多个列。
到目前为止,我编写的代码如下:
# load plugins
import pandas as pd
# import CSV
data = pd.read_csv(
"C:/Users/mcatuogno/Desktop/lista_collegamenti_onb.csv",
sep=";",
header=None,
dtype=str,
usecols=[0, 1, 2, 3, 4, 5],
names=["C1", "C2", "C3", "C4", "C5", "C6"]
)
# sort values
dataSort = data.sort_values(["C1", "C2", "C3", "C4"])
# transpose column based on group by function
dataTranspose = dataSort.groupby(["C1", "C2", "C3", "C4", "C6"])["C5"].apply(list)
使用上面的代码,结果是
C1 C2 ... C6 C5
99 000 ... 09900000001100 [102995, 102997, 102996]
99 000 ... 09900000001135 [103042]
我不知道如何将 C5 列拆分为多个列,每个列的名称为 CN_1、CN_2、...、CN_x。
我可以使用哪个 python 函数?
提前致谢!
解决方案
GroupBy.cumcount
您可以创建辅助系列,以通过、添加MultiIndex
和重塑来计算每组的连续值Series.unstack
:
g = dataSort.groupby(["C1", "C2", "C3", "C4", "C6"])["C5"].cumcount()
print (g)
1 0
2 1
3 2
4 3
0 0
dtype: int64
df = (dataSort.set_index(["C1", "C2", "C3", "C4", "C6", g])['C5']
.unstack()
.add_prefix('Cn_')
.reset_index())
print (df)
C1 C2 C3 C4 C6 Cn_0 Cn_1 Cn_2 Cn_3
0 99 69 99002063 4599974 T4 178885.0 4606066.0 236346.0 310114.0
1 99 69 99002068 3348117 T6 3230802.0 NaN NaN NaN
您的解决方案应更改为为DataFrame
每个构造函数创建新的:
dataTranspose = dataSort.groupby(["C1", "C2", "C3", "C4", "C6"])["C5"].apply(list)
df = (pd.DataFrame(dataTranspose.values.tolist(), index = dataTranspose.index)
.add_prefix('Cn_')
.reset_index())
print (df)
C1 C2 C3 C4 C6 Cn_0 Cn_1 Cn_2 Cn_3
0 99 69 99002063 4599974 T4 178885 4606066.0 236346.0 310114.0
1 99 69 99002068 3348117 T6 3230802 NaN NaN NaN
推荐阅读
- python - 为什么实例化类时需要括号?
- android - Jetpack Compose 中的图标太模糊
- graph - 堆叠的水平图表。如何触发堆叠元素中的单个悬停?
- ios - Xcode 中未安装 Amplify CLI 所需的最低版本
- arrays - 仅当包含搜索数组匹配中的所有项目时才过滤 JSON
- android - 如何注入 Worker 类?
- javascript - JS - 相同的正则表达式,相同的字符串不同的结果
- android - 带有 PreferenceFragmentCompat 的 ViewModel
- java - 查询中特定嵌套对象的 HQL 查询
- powershell - PowerShell ForEach 语句失败