gpt4 book ai didi

python - 将 Dataframe 转换为数据透视表,将值分组到列表中

转载 作者:行者123 更新时间:2023-12-04 03:46:26 25 4
gpt4 key购买 nike

问题

我正在处理一个现有的具有值的 Excel 工作表,需要以我希望收集的不同值分布在不同列中的方式进行转换,并针对我需要列出(并最终追加)其中一个的唯一值列的值。

输入

sr_no, branch_code, Tier1, Tier2, Tier3, Rural
1, 12, Mumbai, Thane, 0, 0
2, 33, Navi Mumbai, Pimpri, Lonavala, 0
3, 120, Pune, Pimpri, 0, 0
4, 8, Surat, Saputara, 0, Silvassa
5, 15, Pune, Nashik, Saputara, 0
6, 49, Banglore, Mumbai, 0, Saputara

我希望从中扫描唯一值的列如下:
["Tier1", "Tier2", "Tier3", "Rural"] --- (A)

获取唯一值不是问题,[“孟买”、“Thane”、“Navi”、“Pimpri”、“Surat”、“Pune”、“Saputara”、“Silvassa”、“Nashik”、“Banglore”]
在每条记录上扫描/匹配唯一值以收集 branch_code 是一项挑战。

审判

我尝试将 (A) 中所需列的组合值放入列表中。

BranchMaster = pd.read_excel("BranchMaster.xlsx")

scan_cols = ["Tier1", "Tier2", "Tier3", "Rural"]
BranchMaster["Combined"] = BranchMaster.loc[:, scan_cols].values.tolist()

现在,我可以逐字遍历每条记录并收集 branch_code,但我相信必须有一种更优化的方法来执行相同的操作。

所需的输出

此输出我只需要采用 Dataframe 格式,因此我是否可以将值存储在 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]

关于python - 将 Dataframe 转换为数据透视表,将值分组到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65076161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com