首页 > 解决方案 > 用列表中的值替换熊猫子集中的所有值

问题描述

我有一个由 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

标签: pythonpandaslistreplacesubset

解决方案


你可以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

推荐阅读