python - 如何从函数中的数据框返回不是由函数计算的列?
问题描述
我有以下数据框
import pandas as pd
df_county = pd.DataFrame({
"A": [50],
"B": [60],
"C": [70]})
df_voronoi = pd.DataFrame({
"area": [1000, 2000, 3000, 4000],
"county": ["A", "B", "C", "A"],
"bus":["bus1", "bus4", "bus20", "bus2"]})
使用以下函数,我正在计算我的值:
def calc(df1, df2):
return [1/(df1[county] / area) for county,area in zip(df2.county, df2.area)]
df=calc(df_county,df_voronoi)
df=pd.DataFrame(df)
print(df)
结果:
这 county
是索引。我想拥有county
自己的列,并且希望bus
将 Voronoi-Dataframe 中的 - 列作为与county
and具有正确关系的列area
。
这意味着我希望函数的输出如下所示:
如何意识到这一点?
还有一个额外的问题:我在什么位置定义函数有关系吗?我有一个示例,该函数在顶部创建,返回的类型是 pandas Dataframe。在此示例中,它是一个列表,我必须从列表中创建一个 Dataframe。如果是,你能解释一下为什么吗?
解决方案
我认为您需要对现有结构进行小修改。试试这个
import pandas as pd
df_county = pd.DataFrame({
"A": [50],
"B": [60],
"C": [70]})
df_voronoi = pd.DataFrame({
"area": [1000, 2000, 3000, 4000],
"country": ["A", "B", "C", "A"],
"bus":["bus1", "bus4", "bus20", "bus2"]})
def calc(df1, df2):
return [(1/(df1[country] / area),area) for country,area in zip(df2.country, df2.area)]
df=calc(df_county,df_voronoi)
mdf= pd.DataFrame([f[0] for f in df]).reset_index()
mdf["area"]= [f[1] for f in df]
mdf.columns = ["country","factor","area"]
print(mdf)
country factor area
0 A 20.000000 1000
1 B 33.333333 2000
2 C 42.857143 3000
3 A 80.000000 4000
添加了区域列,否则我们无法识别我们需要哪个总线(因为 df2 中有两个 A)
merged = pd.merge(mdf,df_voronoi,on=["country","area"],how="left")
merged = merged.drop(columns=["area"])
print(merged)
country factor bus
0 A 20.000000 bus1
1 B 33.333333 bus4
2 C 42.857143 bus20
3 A 80.000000 bus2
推荐阅读
- c# - 在 C# 中,TCP 服务器不会向客户端发送超过 1 个文件
- javascript - 如何循环遍历具有键和关联数组的对象并根据另一个数组中的值存在来过滤数组
- javascript - 如何将函数作为参数传递给其他函数以避免重复代码
- apache-spark - 如何使用 replaceWhere 子句实现以下火花行为
- c - 关于c中的数据对齐
- resize - Xamarin Forms 方向改变了视图大小在网格内没有改变
- r - 如何根据 R 中的组删除特定重复的行?
- apache - 在谷歌云计算引擎上的 vm 实例上安装 wordpress - 文件权限错误
- javascript - W3C Web 组件中没有捕获 Angular 属性
- firefox - 在 Firefox 中下载的字体很糟糕