python - 用列表中的值替换熊猫子集中的所有值
问题描述
我有一个由 3 个不同的组 A、B、C 组成的数据集:
df = pd.DataFrame([[1, "A", "A"], [2, "B", "B"], [3, "A", "A"], [4, "B", "B"], [5, "C", "C"], [6, "C", "C"],
[7, "A", "A"], [8, "B", "B"], [9, "C", "C"]],
columns=["Index", "Group", "Cluster"])
对于每个组,我确定一些集群,我想用集群的值替换集群列。每个集群都有一个列表
listA = [0, 1, 1]
listB = [1, 0, 1]
listC = [0, 0, 1]
我想最后有类似的东西:
指数 | 团体 | 簇 |
---|---|---|
1 | 一个 | 0 |
2 | 乙 | 1 |
3 | 一个 | 1 |
4 | 乙 | 0 |
5 | C | 0 |
6 | C | 0 |
7 | 一个 | 1 |
8 | 乙 | 1 |
9 | C | 1 |
解决方案
你可以groupby.cumcount
然后merge
:
d = {"A":listA,"B":listB,"C":listC}
u = pd.Series(d).explode().to_frame("Cluster")
v = df.assign(k=df.groupby('Group').cumcount()).merge(
u.assign(k=u.groupby(level=0).cumcount()).reset_index() ,
left_on=['Group','k'],right_on=['index','k'],suffixes=('','_y'))
v['Cluster'] = v['Cluster_y']
out = v.reindex(columns=df.columns)
print(out)
Index Group Cluster
0 1 A 0
1 2 B 1
2 3 A 1
3 4 B 0
4 5 C 0
5 6 C 0
6 7 A 1
7 8 B 1
8 9 C 1
推荐阅读
- python - 多处理,Python3,Windows:TypeError:无法腌制 _thread.lock 对象
- c - 将整数和字符串转换为十六进制字符串,并在 C 中以正确的字节序将它们放置在其他十六进制字符串之间
- mysql - 从 SELECT 语句返回的行更新值
- java - 如何限制用户选择 RecyclerView 列表中的 3 个选项
- sql-server-2000 - SQL Server 2000 中一列对应列的最大值
- push-notification - 适用于 iOS 和 Android 应用程序的 EWS 新电子邮件推送通知
- excel - VLOOKUP 使用 CONCATENATE 和范围之间的值
- sql - 我需要从表中获取最大行
- python-3.x - 如果存在,则将目录的一部分设为可选?
- javascript - 如何将其转换为样式组件以及如何嵌套类