熊猫创建创建新列的方法是什么?可以基于单个键在另一列中查找并返回任何重复的值?
原始数据是这样的。称为MaterialsReport_df
:
请注意,我的标记在最后两行中如何出现两次。我想在我的最终报告中合并他们的网站。通常,我还需要返回目标网站BoxTrackingReport_df
的最终报告All Box Tracked Sites
中目标位置{tag, [site 1, site 2, site 3]}
中与已经存在的标签相匹配的所有站点: / p>
我目前正在创建像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}}
[详细编辑]
答案 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)