Python 通过将值分组到列表中,将Dataframe转换为pivot 问题
我正在处理一个现有的excel工作表,该工作表中有值,需要进行转换,以使我希望收集的不同值分布在不同的列中,并与我需要列出(并最终附加)列值之一的唯一值相对应 输入 我希望从中扫描唯一值的列如下:Python 通过将值分组到列表中,将Dataframe转换为pivot 问题,python,pandas,dataframe,csv,aggregate,Python,Pandas,Dataframe,Csv,Aggregate,我正在处理一个现有的excel工作表,该工作表中有值,需要进行转换,以使我希望收集的不同值分布在不同的列中,并与我需要列出(并最终附加)列值之一的唯一值相对应 输入 我希望从中扫描唯一值的列如下: [“一级”、“二级”、“三级”、“农村”]--(A) 获取唯一值不是问题, [“孟买”、“塔纳”、“纳维”、“皮姆普里”、“苏拉特”、“普纳”、“萨普塔拉”、“席尔瓦萨”、“纳希克”、“班格罗尔”] 在每个记录上扫描/匹配唯一值以收集分支代码是一项挑战 审判 我尝试将(a)中所需列的值合并到一个列表中
[“一级”、“二级”、“三级”、“农村”]
--(A)
获取唯一值不是问题,
[“孟买”、“塔纳”、“纳维”、“皮姆普里”、“苏拉特”、“普纳”、“萨普塔拉”、“席尔瓦萨”、“纳希克”、“班格罗尔”]
在每个记录上扫描/匹配唯一值以收集分支代码是一项挑战 审判 我尝试将(a)中所需列的值合并到一个列表中
BranchMaster = pd.read_excel("BranchMaster.xlsx")
scan_cols = ["Tier1", "Tier2", "Tier3", "Rural"]
BranchMaster["Combined"] = BranchMaster.loc[:, scan_cols].values.tolist()
现在,我可以逐条遍历每条记录并收集分支代码,但我相信必须有一种更优化的方法来做到这一点
所需输出
这个输出我只需要在数据帧格式,所以它没有关系,如果我可以存储在CSV,TSV等值
city, branch_code
Mumbai, [12, 49]
Thane, [12]
Navi Mumbai, [33]
Pimpri, [33, 120]
Surat, [8]
Pune, [120, 15]
Saputara, [8, 15, 49]
Silvassa, [8]
Nashik, [15]
Banglore, [49]
您可以执行
melt
和groupby操作:
(df.melt('branch_code', ["Tier1", "Tier2", "Tier3", "Rural"],
value_name='city')
.loc[lambda x: x['city']!='0']
.groupby('city')['branch_code'].agg(list)
.reset_index()
)
输出:
city branch_code
0 Banglore [49]
1 Lonavala [33]
2 Mumbai [12, 49]
3 Nashik [15]
4 Navi Mumbai [33]
5 Pimpri [33, 120]
6 Pune [120, 15]
7 Saputara [8, 15, 49]
8 Silvassa [8]
9 Surat [8]
10 Thane [12]
出于某种原因,分支代码列表显示了冗余值。我在聚合时尝试设置,但无法将其返回列表(使用
astype()
)。然而,在我的实际数据中似乎存在一些NaN。
city branch_code
0 Banglore [49]
1 Lonavala [33]
2 Mumbai [12, 49]
3 Nashik [15]
4 Navi Mumbai [33]
5 Pimpri [33, 120]
6 Pune [120, 15]
7 Saputara [8, 15, 49]
8 Silvassa [8]
9 Surat [8]
10 Thane [12]