如何将熊猫系列转换为数据框以与其他数据框合并

时间:2020-02-01 14:21:01

标签: python pandas dataframe

我想计算每个ID的月数 number_of_months=df.ID.value_counts() 我有熊猫系列

        ID
    564 30
    133 30
    156 30
    153 30

具有单个列ID

如何获取具有两列df1的数据框(ID, numberofmonts)以根据ID与其他数据框df合并

df = pd.merge(df, df1, how='left', left_on=['ID'], right_on = ['ID'])

这是特征工程的标准问题。我想用count或其他函数定义一些新功能,然后与dataframe合并

1 个答案:

答案 0 :(得分:0)

在这种情况下, value_counts()的结果是 Series ,具有:

  • 索引-原始 ID 值,
  • 值-此 ID 在源 Series 中出现的次数。

有点棘手的细节是该系列( ID )的名称实际上是指 到(唯一)列,包含特定事件的出现次数 将其设置为原始的 ID 列。

所以您的任务是:

  • 将索引重命名为 ID (就位)。
  • 将系列本身重命名为 numberOfMonths 或您选择的任何名称 (也存在)。
  • 重置索引,将结果保存到目标变量中。作为 drop 参数保留其默认值( False ),到目前为止 现有索引将保留其名称,成为“普通”列。

执行此操作的代码是:

number_of_months.index.rename('ID', inplace=True)
number_of_months.rename('numberOfMonths', inplace=True)
df1 = number_of_months.reset_index()

对于您的样本数据,结果是:

    ID  numberOfMonths
0  564              30
1  133              30
2  156              30
3  153              30

现在 ID 名称与原始 ID 值相关,您可以将其与 在 ID 列上的另一个DataFrame。

替代解决方案

如果您打算在 df 中添加 numberOfMonths 列, 包含特定 ID 出现了多少次的信息 在此DataFrame中,更快,更简单的解决方案是:

df['numberOfMonths'] = df.groupby('ID').transform('count')