如何对熊猫中两个不同大小数据集的列求和

我有两个数据集。第一个 (df1) 包含超过 200.000 行,第二个 (df2) 只有两行。我需要创建一个新列 df1['column_2'] ,它是 df1['column_1'] 和 df2['column_1'] 的总和

当我尝试制作 df1['column_2'] = df1['column_1'] + df2['column_1'] 时,我收到错误消息“试图在 DataFrame 的切片副本上设置值。尝试使用 . loc[row_indexer,col_indexer] = value 而不是"

如何对具有不同行数的不同数据集的值求和?将不胜感激任何帮助!我的笔记本截图:https ://prnt.sc/p1d6ze


摇曳的蔷薇
浏览 167回答 3
3回答

凤凰求蛊

重新索引应用于与其他相比具有较少记录数的 df,例如这里 y减法:import pandas as pdimport rex = pd.DataFrame([(100,200),(300,400),(100,111)], columns=['a','b'])y = pd.DataFrame([(1,2),(3,4)], columns=['a','b'])z= x - y.reindex_like(x).fillna(0)添加import pandas as pdimport rex = pd.DataFrame([(100,200),(300,400),(100,111)], columns=['a','b'])y = pd.DataFrame([(1,2),(3,4)], columns=['a','b'])z= x + y.reindex_like(x).fillna(0)乘法import pandas as pdimport rex = pd.DataFrame([(100,200),(300,400),(100,111)], columns=['a','b'])y = pd.DataFrame([(1,2),(3,4)], columns=['a','b'])z= x * y.reindex_like(x).fillna(1)

开满天机

我试过你的代码,它使用Pandas 0.25.0 和Python 3.7.0没有错误。如果您使用旧版本,请考虑升级。对于测试,我使用了df1 10 行(更短):   column_10        101        202        303        404        505        606        707        808        909       100和df2有 2 行(就像在你的帖子中一样):   column_10         31         5您的指令df1['column_2'] = df1['column_1'] + df2['column_1'] 给出以下结果:   column_1  column_20        10      13.01        20      25.02        30       NaN3        40       NaN4        50       NaN5        60       NaN6        70       NaN7        80       NaN8        90       NaN9       100       NaN以便:对具有“重叠”索引值的元素求和。其他元素(在df2中没有相应的索引是NaN。由于存在NaN值,此列被强制为float。该指令的替代形式,使用.loc[...]是:df1['column_2'] = df1.loc[:, 'column_1'] + df2.loc[:, 'column_1']它也适用于我的电脑。或者,也许您想 在求和之前将df2 “乘”(复制)到df1的长度?如果是,请运行:df1['column_2'] = df1.column_1 + df2.column_1.values.tolist() * 5在这种情况下, 5是df2应该“相乘”的次数。这次没有发生索引对齐,结果是:   column_1  column_20        10        131        20        252        30        333        40        454        50        535        60        656        70        737        80        858        90        939       100       105

Helenr

我发现如果 df_1 是原始数据帧 df 的切片,我无法制作 df_1['column_3] = df_1['column_1] + df_1['column_2]。所以,我通过编写一个函数解决了我的问题:def new_column(dataframe):    if dataframe['column']=='value_1':   dataframe['new_column'] =(dataframe['column_1']   - df_2[df_2['column']=='value_1']      ['column_1'].values[0])    else:       dataframe['new_column'] =(dataframe['column_1']       - df_2[df_2['column']=='value_2']          ['column_1'].values[0])    return dataframedataframe=df_1.apply(new_column,axis=1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python