我制作了两个示例数据帧,它们都有相同的列名(bucket和amount),对于这两个数据帧,“bucket”是索引
df1有更多的行(完整的集合),df2有行的子集
当我将df2添加到df1中时,操作运行得很好,但索引位置会移动,并且与原始df1的存储桶的顺序不同=['3M'、'6M'、'9M'、'1Y'、'2Y'、'3Y']。。它们类似于1Y、2Y、3M等。在添加操作之后,如何保留ds1原始索引顺序
Buckets=['3M','6M','9M','1Y','2Y','3Y']
Amount1=[1,2,3,4,5,6]
Buckets2=['1Y','2Y','3Y']
Amount2=[4,5,6]
df1 = pd.DataFrame(columns = ['Buckets','Amount'])
df1.loc[:,'Amount']=Amount1
df1.loc[:,'Buckets']=Buckets
df1.set_index('Buckets',inplace=True)
df2 = pd.DataFrame(columns = ['Buckets','Amount'])
df2.loc[:,'Amount']=Amount2
df2.loc[:,'Buckets']=Buckets2
df2.set_index('Buckets',inplace=True)
df1=df1.add(df2,fill_value=0)
print(df1)
^{} 将执行数据帧对齐,如果索引尚未对齐,则该对齐将涉及排序操作。可以在添加之前或之后使}
df2
{a2}{或
*注意} :
reindex_like
将对齐列和索引,如果只想对齐索引,可以使用^{或
或者,可以从两个索引的} ,然后
df1.index
创建一个^{sort
操作生成正确的顺序:所有选项都产生
df1
:您可以使用
loc
将旧索引切回:输出:
虽然前面的答案都适用,但我更喜欢以下语法:
这不需要任何进一步的排序或重新索引,因此它比其他解决方案更易于阅读
这背后的思想是df1+df2返回两个数据帧的总和,或者对于df2不包含值的数据帧返回NaN。更新将覆盖df1中的现有值,但仅在总和不为NaN的情况下
相关问题 更多 >
编程相关推荐