python中的Bucketing和bu的平均值计算

2024-03-28 18:42:25 发布

您现在位置:Python中文网/ 问答频道 /正文

输入数据样本: 101.csv(我有不同ID的类似文件,如102.csv、209.csv等)

ID  A       B
101 1561.5  4.117647059
101 1757    4.705882353
101 1812    7.692307692
101 2020.5  8.333333333
101 1569    5.833333333
101 1958.5  7
101 1657.5  6
101 823.5   7.142857143
101 1938.5  3.529411765
101 2123    4.705882353
101 747.5   4.761904762
101 1895    8.333333333
101 1806.5  6.111111111
101 1702    8.461538462
101 1332    7.142857143
101 1740.5  4.117647059
101 1832    6.25
101 1966.5  6.111111111

我做了一个bucket,用下面的代码计算了一下,我现在要做的是添加一个ID列,每个bucket应该在header的不同列中,我有多个csv文件,每个文件包含不同的ID,我希望我的输出文件包含每个ID的结果,也就是文件夹中的所有csv文件。你知道吗

bins = [650,1000,1350,1700,2050,2400,2750,3000]
a_bins = df.B.groupby(pd.cut(df['A'],bins))
a_bins = a_bins.agg([np.mean]) 

我当前获得的每个id的结果

A   B
650-1000    7.647691597
1000-1350   7.55428538
1350-1700   8.420818076
1700-2050   7.105554845
2050-2400   5.29774235
2400-2750   6.442554031
2750-3100   5.397752428

我需要的是

ID  650-1000    1000-1350   1350-1700   1700-2050   2050-2400   2400-2750   2750-3100
101 7.6476916   7.5542854   8.4208181   7.1055548   5.2977424   6.4425540   5.3977524 
102 7.6576916   6.4425540   8.4508181   7.1155548   7.5542854   6.4725540   5.4077524 
209 7.6876916   8.4208181   7.5542854   5.3977524   7.5542854   5.2977424   7.5542854 


Tags: 文件csv数据代码文件夹iddfbucket
2条回答

我想你想要

bins = [650,1000,1350,1700,2050,2400,2750,3000]
a_bins = df.groupby([pd.cut(df['A'],bins), 'ID']).B
a_bins.agg('mean').reset_index().pivot(index='ID', columns='A', values='B')

这样你会得到:

A    (650, 1000]  (1000, 1350]  ...  (2400, 2750]  (2750, 3000]
ID                              ...                            
101     5.952381      7.142857  ...           NaN           NaN
from pathlib import Path
files = Path(".").glob("1*.csv")
my_df_list = []
bins = [650,1000,1350,1700,2050,2400,2750,3000]
columns = ("650-1000","1000-1350","1350-1700","1700-2050","2050-2400","2400-2750","2750-3000")
for file in files:
    file_name = file.name
    file_id = file_name.replace("*.csv","")
    df = pd.read_csv(file_name)
    print(df.columns)
    bins = [650,1000,1350,1700,2050,2400,2750,3000]
    a_bins = df.B.groupby(pd.cut(df['A'],bins))
    a_bins = a_bins.agg([np.mean]).reset_index(drop=True)
    a_bins_df = a_bins.T.copy()
    a_bins_df.columns = columns
    a_bins_df.index = [file_id]
    my_df_list.append(a_bins_df)
df_total = pd.concat(my_df_list,axis=0)

假设所有的.csv文件都在同一个目录下,下面是输出,我将1.csv复制为2.csv来测试上面的脚本

    650-1000    1000-1350   1350-1700   1700-2050   2050-2400   2400-2750   2750-3000
102 5.952381    7.142857    5.316993    6.422334    4.705882    NaN NaN
101 5.952381    7.142857    5.316993    6.422334    4.705882    NaN NaN

相关问题 更多 >