python - 映射多个数据框的值并填充列

标签 python pandas dataframe

假设我有以下三个数据框:

数据框 1:

df1 = {'year': ['2010','2012','2014','2015'], 'count': [1,1,1,1]}
df1 = pd.DataFrame(data=df1)
df1 = df1.set_index('year')
df1

year    count
2010    1
2012    1
2014    1
2015    1

数据框 2:

df2 = {'year': ['2010','2011','2016','2017'], 'count': [2,1,3,1]}
df2 = pd.DataFrame(data=df2)
df2 = df2.set_index('year')
df2

year    count
2010    2
2011    1
2016    3
2017    1

数据框 3:

df3 = {'year': ['2010','2011','2012','2013','2014','2015','2017'], 'count': [4,2,5,4,4,1,1]}
df3 = pd.DataFrame(data=df3)
df3 = df3.set_index('year')
df3

year    count
2010    4
2011    2
2012    5
2013    4
2014    4
2015    1
2017    1

现在我想要三个包含所有年份和计数的数据框。例如,如果 df1 缺少年份 2011、2013、2016、2017,那么这些年份将添加到 df1 的索引中,每个新添加的索引的计数都为 0。

所以对于 df1,我的输出应该是这样的:

year    count
2010    1
2012    1
2014    1
2015    1
2011    0
2013    0
2016    0
2017    0

对于 df2 和 df3 也是如此。谢谢。

最佳答案

您可以使用 unionreindex :

idx = df1.index.union(df2.index).union(df3.index)
print (idx)
Index(['2010', '2011', '2012', '2013', 
       '2014', '2015', '2016', '2017'], dtype='object', name='year')

另一种解决方案:

from functools import reduce
idx = reduce(np.union1d,[df1.index, df2.index, df3.index])
print (idx)

['2010' '2011' '2012' '2013' '2014' '2015' '2016' '2017']

df1 = df1.reindex(idx, fill_value=0)
print (df1)
      count
year       
2010      1
2011      0
2012      1
2013      0
2014      1
2015      1
2016      0
2017      0
df2 = df2.reindex(idx, fill_value=0)
print (df2)
      count
year       
2010      2
2011      1
2012      0
2013      0
2014      0
2015      0
2016      3
2017      1
df3 = df3.reindex(idx, fill_value=0)
print (df3)
      count
year       
2010      4
2011      2
2012      5
2013      4
2014      4
2015      1
2016      0
2017      1

关于python - 映射多个数据框的值并填充列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48297940/

相关文章:

python - 在 Ubuntu 上将 Pyqt 安装到替代 Python 版本

python - 图形工具:通过用户定义的标签查找顶点

Python hex 到 int 转换错误

python - Pandas - 连接数据框

python - 如何将数据框中一列的所有元素与另一个数据框中为该列指定的值相乘?

Pandas 列标题拆分

python - 选择滞后阈值

python - 根据 pandas 中另一个数据帧的相似值填充数据帧中的列

python - 从 Pandas 的数据框中随机选择唯一行

python - df.iloc[1].ColumnName 是否返回整行,而不是一个特定值?