首页 > 解决方案 > 如何从函数中的数据框返回不是由函数计算的列?

问题描述

我有以下数据框

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 中的 - 列作为与countyand具有正确关系的列area

这意味着我希望函数的输出如下所示:

在此处输入图像描述

如何意识到这一点?

还有一个额外的问题:我在什么位置定义函数有关系吗?我有一个示例,该函数在顶部创建,返回的类型是 pandas Dataframe。在此示例中,它是一个列表,我必须从列表中创建一个 Dataframe。如果是,你能解释一下为什么吗?

标签: pythonpandasfunctiondataframe

解决方案


我认为您需要对现有结构进行小修改。试试这个

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

推荐阅读