Pandas将列拆分为行:处理含date与mentions列的DataFrame
解决DataFrame拆分mentions列并按日期统计提及次数的问题
别着急,这个问题确实很常见,用Pandas的几个内置方法就能轻松搞定!我先帮你拆解步骤,从拆分mentions列到最终统计,一步步来:
第一步:先明确原始数据结构(模拟示例)
假设你的原始DataFrame是这样的(mentions列是逗号分隔的字符串):
import pandas as pd df = pd.DataFrame({ 'date': ['2023-10-01', '2023-10-01', '2023-10-02'], 'mentions': ['Alice,Bob', 'Charlie', 'Bob,Alice'] })
第二步:拆分mentions列
核心用explode()方法,它能把列表类型的列拆成多行。如果你的mentions是字符串,先转成列表:
# 把字符串拆成列表,再拆分多行 df_split = df.assign(mentions=df['mentions'].str.split(',')).explode('mentions')
拆分后就得到你想要的格式:
| date | mentions |
|---|---|
| 2023-10-01 | Alice |
| 2023-10-01 | Bob |
| 2023-10-01 | Charlie |
| 2023-10-02 | Bob |
| 2023-10-02 | Alice |
⚠️ 小细节处理:
- 如果mentions里有空格(比如
'Alice, Bob'),拆分后记得去空格:df_split = df.assign(mentions=df['mentions'].str.split(',').apply(lambda x: [s.strip() for s in x])).explode('mentions') - 如果有空值,拆分后用
dropna()去掉空行:df_split = df.assign(mentions=df['mentions'].str.split(',')).explode('mentions').dropna(subset=['mentions'])
第三步:按日期统计提及次数
拆分完成后,用groupby就能轻松统计了:
# 按日期+提及项分组,统计次数 final_df = df_split.groupby(['date', 'mentions']).size().reset_index(name='count')
得到的结果是:
| date | mentions | count |
|---|---|---|
| 2023-10-01 | Alice | 1 |
| 2023-10-01 | Bob | 1 |
| 2023-10-01 | Charlie | 1 |
| 2023-10-02 | Alice | 1 |
| 2023-10-02 | Bob | 1 |
如果想要宽表格式(每个提及项作为列),可以用pivot转置:
final_pivot = final_df.pivot(index='date', columns='mentions', values='count').fillna(0).astype(int)
结果如下:
| mentions | Alice | Bob | Charlie |
|---|---|---|---|
| 2023-10-01 | 1 | 1 | 1 |
| 2023-10-02 | 1 | 1 | 0 |
这样就完全实现你的需求啦!
内容的提问来源于stack exchange,提问作者whateveryousayiam
相关产品推荐
相关产品推荐

