为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

摇曳的蔷薇 2022-05-19 16:18:22
我有两个数据集。第一个 (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
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

重新索引应用于与其他相比具有较少记录数的 df,例如这里 y


减法:


import pandas as pd

import re

x = 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 pd

import re

x = 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 pd

import re

x = 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)


查看完整回答
反对 回复 2022-05-19
?
开满天机

TA贡献1786条经验 获得超13个赞

我试过你的代码,它使用Pandas 0.25.0 和Python 3.7.0没有错误。如果您使用旧版本,请考虑升级。


对于测试,我使用了df1 10 行(更短):


   column_1

0        10

1        20

2        30

3        40

4        50

5        60

6        70

7        80

8        90

9       100

和df2有 2 行(就像在你的帖子中一样):


   column_1

0         3

1         5

您的指令df1['column_2'] = df1['column_1'] + df2['column_1'] 给出以下结果:


   column_1  column_2

0        10      13.0

1        20      25.0

2        30       NaN

3        40       NaN

4        50       NaN

5        60       NaN

6        70       NaN

7        80       NaN

8        90       NaN

9       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_2

0        10        13

1        20        25

2        30        33

3        40        45

4        50        53

5        60        65

6        70        73

7        80        85

8        90        93

9       100       105


查看完整回答
反对 回复 2022-05-19
?
Helenr

TA贡献1780条经验 获得超4个赞

我发现如果 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 dataframe

dataframe=df_1.apply(new_column,axis=1)


查看完整回答
反对 回复 2022-05-19
  • 3 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号