gpt4 book ai didi

python - 将多个值添加到列中 - Pandas

转载 作者:行者123 更新时间:2023-12-01 07:46:17 24 4
gpt4 key购买 nike

我有两个 pandas 数据框,我试图将它们的 ID 号合并在一起。然而,在 df1 中,该 ID 被多次使用,而在 df2 中,该 ID 仅被使用一次。因此,我希望最终的数据帧包含所有用逗号分隔的结果,并在其前面有一个索引值。我做了一个简单的例子来帮助我解释我的问题。

df1: picture of dataframe 1

df2: enter image description here

合并目标: enter image description here

我尝试过像平常一样合并它们:

MergedGoal= pd.merge(df1, df2, on='ID', how='left')

但是我收到 ID 关键错误,可能是因为存在重复项。我怎样才能将它们添加在一起?如果有人也能给我一些关于如何为每个附加值添加索引的见解,那就太棒了。但是,如果不可能添加索引号,那完全没问题,我只需要同一条目中的所有值用逗号分隔。

最佳答案

我通过以下方式创建了df1:

df1 = pd.DataFrame(data=[
[ 1, 'Manchester', 'NH', 3108 ],
[ 1, 'Bedford', 'NH', 3188 ],
[ 6, 'Boston', 'MA', 23718 ],
[ 1, 'Austin', 'TX', 20034 ]],
columns=['ID', 'City', 'State', 'Zip'])
df1.Zip = df1.Zip.astype(str).str.zfill(5)

请注意,我更改了源Zip(正如我所见,它们是“普通”整数)转换为字符串,因为您希望有前导零。

为了创建df2,我使用了:

df2 = pd.DataFrame(data=[[ 1, 'Best Cities', 'xxx' ], [ 6, 'Worst Cities', 'yyy' ]],
columns=['ID', 'Title', 'Description'])

作为准备步骤,让我们定义一个将使用的函数聚合 df1 中的列:

def fn(src):
lst = [ f'{idx}) {val}' for idx, val in enumerate(src, start=1) ]
return ', '.join(lst)

该函数的第一步是列表理解,其中enumerate 迭代src(当前列的内容在当前组中)和替补:

  • idx - 当前元素索引,但从 1 开始,
  • val - 当前元素本身。

结果项的格式化执行f-string。结果是一个列表,例如城市名称前面带有数字。

return 语句将此列表连接成一个字符串,插入“,”他们之间。

所以例如对于 ID == 1City 列的组,源值为:[ 'Manchester', 'Bedford', 'Austin' ] 结果是:1) 曼彻斯特,2) 贝德福德,3) 奥斯汀

实际处理可以通过单个指令执行:

pd.merge(df2, df1.groupby('ID').agg(fn), how='left',
left_on='ID', right_index=True).fillna('')

如您所见:

  • 我恢复了合并数据帧的顺序。这样的结果包含来自 df2 的第一列,然后来自 df1 的第一列。
  • df1 中的
  • CityStateZip 列位于首位按ID分组并使用fn函数进行聚合。
  • 然后将它们与df2合并。
  • 我添加了 fillna('') 以用空字符串替换 NaN 值,如果ID仅存在于df2中,则会发生这种情况。

关于python - 将多个值添加到列中 - Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56448336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com