交叉表思路

 

 

复制代码
def cross_analysis(variable_list, table_name, sub_area):
    # print(variable_list)
    # data = cross_analysis(["TPWL", "TPEB", "TPTOPA"], data_all, area)
    # TPWL是省份数据, TPEB是X  TPTOPA是Y,进行交叉, area是河北, 这里要用全国的数据才可以
    # ["Q29_2", "Q42", "Q29_1"]  -> ["Q42", "Q29_1"]
    #    省份     X      Y
    result = read_indexs_by_index(table_name, variable_list)

    result_sort_data = result.dropna(how='all').sort_values(by=variable_list, ascending=False)  # 出现了没有按照顺序columns
    """
        PXD   PSM  PPL
    41      5   8.0  卓资县
    229     5   7.0  卓资县
    246     5   8.0  卓资县
    """
    # print(result_sort_data)

    # 需要算两种值,一个是全国的,一个是局部的。
    # 全国的只需要后两个
    all_the_country_value_lables = value_lables[variable_list[1]]  # 得到的是变量x的
    # print(all_the_country_value_lables)  # {1: '幼儿园', 2: '小学', 3: '初中', 4: '高中', 5: '职业高中/中专/技校'}
    cross_dict_data = {"全国": {}, sub_area: {}}
    for i in all_the_country_value_lables.keys():
        # 全国对应值标签的count
        atc_data = result_sort_data[(result_sort_data[variable_list[1]] == i)].iloc[:, len(variable_list) - 1]
        # print("全国的:atc_data:\n ", atc_data)
        """
        可以理解为得到y
        1359746    19.0
        1347442    17.0
        1367416    16.0
        1334097    15.0
                   ... 
        963347      7.0
        
        可以理解为series
        """
        try:
            cross_dict_data["全国"][all_the_country_value_lables[i]] = float(
                "%.4f" % (atc_data.sum() / atc_data.count()))
            # print("i: \n", i)
            # print("sum(atc_data): \n", atc_data.sum())
            # print("atc_data.count(): \n", atc_data.count())
        except:
            cross_dict_data["全国"][all_the_country_value_lables[i]] = float("%.4f" % (0.0000))

        # -----------------------------------------------------------------------------------------#
        atd_data = result_sort_data[(result_sort_data[variable_list[0]].map(lambda x: (sub_area in x))) & (
                result_sort_data[variable_list[1]] == i)].iloc[:, len(variable_list) - 1]
        # print(atd_data)
        try:
            cross_dict_data[sub_area][all_the_country_value_lables[i]] = float(
                "%.4f" % (sum(atd_data) / atd_data.count()))
        except:
            cross_dict_data[sub_area][all_the_country_value_lables[i]] = float("%.4f" % (0.0000))
    return pd.DataFrame(cross_dict_data)
复制代码

 

posted @   我当道士那儿些年  阅读(8)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示