暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pandas数据筛选

筑基期摸鱼大师 2022-08-04
726
(
好好学习 
天天向上
)

昨天冤种带教老师叫我打的电话还没打完

非常烫嘴的广普

我跟旁边的小哥说

我帮他做表

他帮我打电话

他说哒咩

社会主义接班人如我

还是帮他做了表

今天记录一下昨天做表的用到的函数

(祈祷一下冤种带教老师不要再叫我打电话😭)

🙋利用百分位数筛选每组前20%的数据

🙋按照公司内码分组,然后挑选每组中金额最大的前20%数据,最后将所有数据合并输出。

    import pandas as pd
    import numpy as np


    data = pd.read_excel("分位数计算.xlsx")
    grouped = data.groupby("公司内码")
    df_all = []


    for g,df in grouped:
    df = df[(df["其他流动资产"]> np.percentile(df["其他流动资产"],80))].copy() ##按照分位数筛选,>80,即代表选择金额最大的前20%的数据
    df["前20%其他流动资产的平均值"] = df["其他流动资产"].mean()

    df_all.append(df)

    data_all = pd.concat(df_all)
    data_all.to_excel("前20%其他流动资产的数据.xlsx",index=False)


    ##要加copy(),要不然会报错SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
    ##百分位数的概念:np.percentile(a,80)的意思是该列数据中有80%的数小于或者等于这个数。np.percentile会对数值从小到大自动排序后再确定分位数


    ##筛选前20%数据的另外方法
    # for g,df in grouped:
    # df = df.sort_values(["其他流动资产"], ascending=False)
    # df = df.head(int(len(df) (1/(30/100)))) ##前30%数据
    # df["前20%其他流动资产的平均值"] = df["其他流动资产"].mean()
    # df_all.append(df)

    🙋检验输出结果,原表中公司代码1000001017条数据,前20%的数据就有3.4条,向下取整应该是4条数据。将其他流动资产按照降序排序,前四条数据中的其他流动资产分别为1560296401134421262311581914321151944732,输出结果与上述的4条数据一致。

    🙋筛选每组金额最大的一行数据

    🙋按照公司内码分组,然后挑选每组中金额最大的数据,最后将所有数据合并输出。

      import pandas as pd
      import numpy as np


      data = pd.read_excel("分位数计算.xlsx")
      grouped = data.groupby("公司内码")
      df_all = [] #df_all是一个列表


      for g,df in grouped:
      df = df.iloc[df['其他流动资产'].idxmax()] ##找出其他流动资产中金额最大值所在行的索引,再根据索引选取行数据。
      df_all.append(df)


      data_all = pd.DataFrame(df_all) ##此处df是series,series合并构建一个dataframe


      data_all.to_excel("其他流动资产最大的数据.xlsx",index=False)


      #列表构建dataframe可以直接用pd.DataFrame

      以上就是今天的内容!

      文章转载自筑基期摸鱼大师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论