熊猫使索引与另一列中所有重复值的键匹配的新列的方法

时间:2019-07-05 18:55:39

标签: python pandas

熊猫创建创建新列的方法是什么?可以基于单个键在另一列中查找并返回任何重复的值?

原始数据是这样的。称为MaterialsReport_df

enter image description here

请注意,我的标记在最后两行中如何出现两次。我想在我的最终报告中合并他们的网站。通常,我还需要返回目标网站BoxTrackingReport_df的最终报告All Box Tracked Sites中目标位置{tag, [site 1, site 2, site 3]}中与已经存在的标签相匹配的所有站点: / p>

enter image description here

我目前正在创建像BoxTrackingReport_df['All Box Tracked Sites'] = [site_dict.get(x) for x in BoxTrackingReport_df['Tag']] 这样的字典,然后遍历字典以返回所有可能的站点:

BoxTrackingReport_df['All Box Tracked Sites'] = [x + "  " for x in MaterialsReport_df.loc[BoxTrackingReport_df['Tag'] == MaterialsReport_df['Tag'], ['Scoring Site Including X']]]

我认为会有一种更简单的方法,因为我的字典代码很麻烦。我尝试用熊猫的方式:

ValueError: Can only compare identically-labeled Series objects

尝试给了我这个错误:

{{1}}

[详细编辑]

3 个答案:

答案 0 :(得分:1)

我在所有人的帮助下特别是在@ anky_91

中弄清楚了

df[df.A.duplicated(keep=False)].groupby('A')['B'].apply(' '.join).reset_index(name='All_boxed_site') – anky_91 59分钟前

这是我的最终解决方案:

AllBoxSites_df = MaterialsReport_df.groupby('Tag')['Scoring Site Including X'].apply(' '.join).reset_index(name='All Box Tracked Sites')
BoxTrackingReport_df = pd.merge(BoxTrackingReport_df, AllBoxSites_df, how='left', left_on='Tag', right_on='Tag')

所以我实际上使用groupby创建了一个新的df,然后将其合并以确保应用了索引匹配。

答案 1 :(得分:0)

只需将groupby().apply()一起使用

df.groupby('Tag')['Scoring Site Including X'].apply(' '.join)

答案 2 :(得分:0)

我使用了一个具有定制功能的示例,如下所示。

创建数据框:

import pandas as pd
df_data = pd.DataFrame({"tag": ["1", "2", "3","4", "4"], "nams":["a", "b", "c", "d", "e"]}); df_data```

Apply function to groupby:

def join_with_space(x):     return(“” .join(x))

df_data.groupby(“ tag”)[“ nams”]。agg(join_with_space)