gpt4 book ai didi

python - 按日期排序 Pandas ,自定义聚合器 : combine all the data for each date

转载 作者:行者123 更新时间:2023-12-05 03:47:42 26 4
gpt4 key购买 nike

我正试图找到一个解决方案,如何更改我的 pandas 数据框。我有一个带有新闻标题的数据集。每天有多个头条新闻。我想将日期(天)作为行,每个标题每天都分配给一个新列。换句话说,我想合并每个日期的所有标题数据。而不是每天都有一个单独的标题。某种 pandas 自定义聚合器可以完成这项工作,但我正在努力想出一个。

我能够按日期对数据进行分组,但现在每天的所有标题都在同一列中。而不是在单独的列中。 (见图2)

df_nyt_all.groupby(['date'], as_index = False).agg({'headline': ','.join})

我一直在寻找解决方案,但一直没有成功。

我附上了 3 张图片。第一张图片显示了我的 df 最初的样子。 current df

current df

第三张图片显示了我希望 df 看起来像的示例。

how the df should look like

最佳答案

以小数据框为例:

df = pd.DataFrame({'Date':['d1','d1','d1','d2','d2'],'headline':['h1','h2','h3','h4','h5']})

我们可以这样完善您自己的答案:

df.groupby(['Date'], as_index = True).agg({'headline': ','.join})['headline'].str.split(',', expand=True)

它将您用逗号加入的标题拆分为单独的列:

    0   1   2
Date
d1 h1 h2 h3
d2 h4 h5 None

这不是很稳健,因为如果标题有逗号,它也会在这些逗号上分开。一个更强大的解决方案是它的一个变体,我们首先通过将每个日期的标题收集到一个列表中来聚合,然后扩展列表:

df.groupby('Date', as_index=True)['headline'].apply(list).apply(pd.Series).reset_index()

(这里我重置索引——你可以在第一个解决方案中做同样的事情)得到

    Date    0   1   2
0 d1 h1 h2 h3
1 d2 h4 h5 NaN

要获取列名,解决方案可以展开如下。我们创建一个字典,用 f'Top{n}' 替换 'n' for n 从 0 到最大列索引

df2 = df.groupby('Date', as_index=True)['headline'].apply(list).apply(pd.Series).reset_index()
new_col_names = {n:f'Top{n}' for n in range(len(df2.columns))}
df2.rename(columns = new_col_names, inplace = True)
df2

产生

Date    Top0    Top1    Top2
0 d1 h1 h2 h3
1 d2 h4 h5 NaN

关于python - 按日期排序 Pandas ,自定义聚合器 : combine all the data for each date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64776596/

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