如何在 df concat 与其他 df 的列中执行函数 sum()
How execute fuction sum() in a column with df concate with other df
我正在使用 concat 将 5 个相等的 df 合并为一个并获得成本的总和()。
这些值不是真实的,只是 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()
结果:
TypeError: can only concatenate str (not "float") to str
尝试 #2:
all_vendors.Cost.astype(str)
all_vendors.Cost.sum()
结果:
TypeError: can only concatenate str (not "float") to str
尝试 #3:
all_vendors.Cost.astype(float)
all_vendors.Cost.sum()
结果:
ValueError: could not convert string to float: '100'
您首先需要将 dataframe 转换为 float 以便能够添加带小数的数字,对于它们您使用 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
如果你想使用 float 类型的数据框,你需要分配它:
all_vendors2=all_vendors.astype(float)
all_vendros2.cost.sum()
输出:
500
我得到这个值 500:
df_list = [pd.DataFrame(data={"id": ["1515"], "cost": ["100"]}) for i in range(5)]
pd.concat(df_list).cost.astype(float).sum()
只要它们是数据帧并且您将字符串转换为浮点数,它看起来就不错。
你的问题是你没有将你的 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
删除字符串中的任何逗号
检查此 helps.This 是否会给出 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)
我正在使用 concat 将 5 个相等的 df 合并为一个并获得成本的总和()。
这些值不是真实的,只是 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()
结果:
TypeError: can only concatenate str (not "float") to str
尝试 #2:
all_vendors.Cost.astype(str)
all_vendors.Cost.sum()
结果:
TypeError: can only concatenate str (not "float") to str
尝试 #3:
all_vendors.Cost.astype(float)
all_vendors.Cost.sum()
结果:
ValueError: could not convert string to float: '100'
您首先需要将 dataframe 转换为 float 以便能够添加带小数的数字,对于它们您使用 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
如果你想使用 float 类型的数据框,你需要分配它:
all_vendors2=all_vendors.astype(float)
all_vendros2.cost.sum()
输出:
500
我得到这个值 500:
df_list = [pd.DataFrame(data={"id": ["1515"], "cost": ["100"]}) for i in range(5)]
pd.concat(df_list).cost.astype(float).sum()
只要它们是数据帧并且您将字符串转换为浮点数,它看起来就不错。
你的问题是你没有将你的 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
删除字符串中的任何逗号
检查此 helps.This 是否会给出 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)