如何在带有 df 的列中执行函数 sum() 与其他 df 并存



我正在使用 concat 将 5 个相等的 df 合并为一个,并获得总成本 sum((。

这些值不是真实的,只是 df 外观的一个例子

我尝试过:

import pandas as pd
g = {"id": "1515", "cost": "100"}
b = {"id": "1515", "cost": "100"}
f = {"id": "1515", "cost": "100"}
c = {"id": "1515", "cost": "100"}
o = {"id": "1515", "cost": "100"}
all_vendors = pd.concat([g, b, f, c, o])

数据类型

all_vendors.dtypes
Campaign          object
campaignid       float64
Campaign_name     object
Cost              object
Month             object
Year & month      object
dtype: object

尝试

尝试 #1:

all_vendors.Cost.sum()

结果:

类型错误:只能将 str(而不是 "float"( 连接到 str

尝试#2:

all_vendors.Cost.astype(str)
all_vendors.Cost.sum()

结果:

类型错误:只能将 str(而不是 "float"( 连接到 str

尝试 #3:

all_vendors.Cost.astype(float)
all_vendors.Cost.sum()

结果:

值错误:无法将字符串转换为浮点数:"100">

您的问题是您没有将astype呼叫重新分配给DataFrame

import pandas as pd
data = {
"id": ['1,515','1,515','1,515','1,515','1,515'],
"cost": ['1,000','1,000','1,000','1,000','1,000']
}
all_vendors = pd.DataFrame.from_dict(data)
all_vendors['cost'] = all_vendors.cost.str.replace(',','').astype(float)
print(all_vendors.cost.sum())
# Output: 500

如注释中所述,使用str.replace删除字符串中的任何逗号

我得到了这个工作,值为 500:

df_list = [pd.DataFrame(data={"id": ["1515"], "cost": ["100"]}) for i in range(5)]
pd.concat(df_list).cost.astype(float).sum()

只要它们是数据帧,并且您将字符串转换为浮点数,它看起来就不错。

检查这是否有帮助。这将给出 id 的总数。

import pandas as pd
g = pd.DataFrame({"id": ["1515"], "cost": ["100"]})
b = pd.DataFrame({"id": ["1515"], "cost": ["100"]})
f = pd.DataFrame({"id": ["1515"], "cost": ["100"]})
c = pd.DataFrame({"id": ["1515"], "cost": ["100"]})
o = pd.DataFrame({"id": ["1515"], "cost": ["100"]})
all_vendors = pd.concat([g, b, f, c, o])
a=pd.DataFrame.from_records(all_vendors).astype(float).groupby('id').sum().T.to_dict()
print(a)

您首先需要将数据帧转换为浮点数才能将带有小数的数字相加,对于它们,您可以使用DataFrame.astype

import pandas as pd
g = pd.DataFrame({"id": ["1515"], "cost": ["100"]})
b = pd.DataFrame({"id": ["1515"], "cost": ["100"]})
f = pd.DataFrame({"id": ["1515"], "cost": ["100"]})
c = pd.DataFrame({"id": ["1515"], "cost": ["100"]})
o = pd.DataFrame({"id": ["1515"], "cost": ["100"]})
all_vendors = pd.concat([g, b, f, c, o])

如果字符串中有",",则需要:

all_vendors['cost']=all_vendors['cost'].str.replace(',','')

然后计算总和:

all_vendors.astype(float).cost.sum()

输出:

500.0

如果要使用浮点型数据框,则需要为其分配:

all_vendors2=all_vendors.astype(float)
all_vendros2.cost.sum()

输出:

500

最新更新