首页 > 解决方案 > 如何根据在 dataframe2 中创建的列在 dataframe1 中创建列,该列是通过在 dataframe1 上使用 groupby() 派生的

问题描述

首先,我为标题措辞不佳表示歉意。

我有 2 个熊猫数据框。X_train 和 crunched_X_train。
crunched_X_train 是通过在名为 id 的列上使用 groupby() 从 X_train 派生的。
然后我在 crunched_X_train 上做了一些事情,这样我就在这个数据框中创建了一个名为 label 的新列。对于 crunched_X_train 中的每个 id,该行中都有一个标签。label 是一个介于 0 和 3 之间的数字。我想将此标签列添加到原始 X_train 中,这样对于 X_train 中的每个 id,该行上都会有一个标签,该标签来自 crunched_X_train。

我会尝试用表格更好地解释。
我省略了表中无关紧要的列。
crunched_X_train:


id  label
                        
1   2
2   0
3   1
4   3
5   2

我希望 X_train 看起来像,带有新的列标签:


id  label
1   2
1   2    
1   2
.
.
2   0
2   0
3   1
3   1


我希望我可以这样做,但它会抛出
ValueError: Can only compare samely-labeled Series objects

X_train["label"] = crunched_X_train["label"].loc[crunched_X_train["id"] == X_train["id"]]

然后我尝试了这种迭代方法,这似乎是有效的。但这是不好的做法,需要永远。

for index, row in X_train.iterrows():
    row["label"] = crunched_X_train["label"].loc[crunched_X_train["id"] == row["id"]]


任何帮助表示赞赏。谢谢。

标签: pythonpandas

解决方案


在 groupby 之后,id 列是 的索引crunched_X_train。然后,您可以只将该索引加入原始数据框(id列在哪里):

X_train.join(crunched_X_train["label"], on="id")

假设crunched_X_trainhasid作为索引并且X_train具有名为id.

在此处查看熊猫文档: pandas.pydata.org/docs/reference/api/pandas.DataFrame.join.html


推荐阅读