【发布时间】:2021-06-11 19:20:09
【问题描述】:
我正在尝试在数据挖掘中实现“自下而上计算”算法 (https://www.aaai.org/Papers/FLAIRS/2003/Flairs03-050.pdf)。
我需要使用“pandas”库来创建一个数据框并将其提供给一个递归函数,该函数还应该返回一个数据框作为输出。我只能将最后一列作为输出返回,因为我无法弄清楚如何动态构建数据框。
这是python程序:
import pandas as pd
def project_data(df, d):
return df.iloc[:, d]
def select_data(df, d, val):
col_name = df.columns[d]
return df[df[col_name] == val]
def remove_first_dim(df):
return df.iloc[:, 1:]
def slice_data_dim0(df, v):
df_temp = select_data(df, 0, v)
return remove_first_dim(df_temp)
def buc(df):
dims = df.shape[1]
if dims == 1:
input_sum = sum(project_data(df, 0) )
print(input_sum)
else:
dim_vals = set(project_data(df, 0).values)
for dim_val in dim_vals:
sub_data = slice_data_dim0(df, dim_val)
buc(sub_data)
sub_data = remove_first_dim(df)
buc(sub_data)
data = {'A':[1,1,1,1,2],
'B':[1,1,2,3,1],
'M':[10,20,30,40,50]
}
df = pd.DataFrame(data, columns = ['A','B','M'])
buc(df)
我得到以下输出:
30
30
40
100
50
50
80
30
40
但我需要的是一个数据框,像这样(不一定是格式化的,而是一个数据框):
A B M
0 1 1 30
1 1 2 30
2 1 3 40
3 1 ALL 100
4 2 1 50
5 2 ALL 50
6 ALL 1 80
7 ALL 2 30
8 ALL 3 40
9 ALL ALL 150
我如何做到这一点?
【问题讨论】:
标签: python pandas data-mining