【问题标题】:Combining multiple Dataframes into one and filling in missing information将多个Dataframes合并为一个并填写缺失的信息
【发布时间】:2020-03-21 03:12:45
【问题描述】:

我有一个 DataFrame,其中包含有关某些项目的信息,例如状态、受让人、优先级等...我有一堆这样的 DataFrame,每个 DataFrame 代表一年中不同周的这些项目。

我想计算每个状态在每个 DataFrame 中出现的次数。我可以使用df.groupby("status").size().to_frame() 执行此操作,但这会在单独的 DataFrame 中一次获取一帧的信息。

如何将这些 DataFrame 组合在一起以获得一个大 DataFrame? (每一行看起来像:日期,状态,计数)此外,如果状态出现在其中一个子集中,但不在其他子集中,我需要将该状态添加到计数为 0 的所有其他子集中。这是可能的?我无法找到另一个答案或一组答案来解释这一点。

【问题讨论】:

  • 考虑添加数据框样本和预期输出。
  • 您可能想查看pandas merge 来了解您问题的第一部分

标签: python pandas dataframe


【解决方案1】:

不确定我是否完全理解你想要做什么,但是结合两个帧 df 和 df2,比如说,你可以使用

df2.set_index(pd.Series([i for i in range(len(df),len(df)+len(df2))]), inplace=True)
df_concat = pd.concat([df, df2])

然后获取组合数据帧的计数:

df_concat.groupby(df_concat.columns.tolist()).size().reset_index().rename(columns={0:'counts'})

【讨论】:

  • 我不确定你在第一行的意思是什么,set_index 操作的意义何在?我认为这很接近,但仍然存在并非所有日期都表示所有可能的列值的问题。 (例如:如果一个连接的 DataFrames 的值为“Closed”,但另一个 DataFrames 没有,则最终的 DataFrame 需要有一行表示日期不为“Closed”状态的计数为 0 .
  • set_index 操作只是为了确保连接中的第二个 DataFrame 的索引列不会在 0 处重新启动。我是否理解您所有的 DataFrame 都具有相同的列结构?我同意@Poojan 的观点,如果您发布输入示例和所需输出的示例,将会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
相关资源
最近更新 更多