数据划分处理(基于python的pandas中的dataframe数据结构)

数据划分处理(基于python的pandas中的dataframe数据结构)

我们常常需要从一个表格中,得到相关的子表格。

正如问题:按国家,从原始资源表中得到金银铜的年储量变化。(如图所示)

比较简单的做法可以是:多重循环

但小编往往不会满足于这样的处理方式,相反更偏向于使用相关的已有的函数,对整个表格同时进行处理。

分析上述实际问题,如果先按国家(魏、蜀、吴)划分为三个数据集,则储量可由(资源名、年份)唯一确定

正如 df['金']['1960'] = 11,其中df为事先生成的空的dataframe。

data_Shu = data[data['国家'] == '蜀']
data_Wu = data[data['国家'] == '吴']
data_Wei = data[data['国家'] == '魏']

data_Shu的结果为:  

  资源名 国家    年份  储量
0   金  蜀  1960  11
1   金  蜀  1961  12
2   金  蜀  1962  13
3   银  蜀  1960  14
4   银  蜀  1961  15
5   银  蜀  1962  16
6   铜  蜀  1960  17
7   铜  蜀  1961  18
8   铜  蜀  1962  19

于是问题可看做是从这个dataframe中,以资源名列为columns,年份列为index,储量为数据,生成新的dataframe。

在此,小编向各位大佬发问:有没有现成函数,能实现这样的功能?

小编不知道,于是需要自己写这样的函数,调用情况如下:

df = create_df_by_2col(data_Shu, -1, 2, 0)  
# 意思是由数据框data_Shu,以最后一列"储量"为要填充的数据,
# 以第二列"年份"为index,以第0列"资源名"为columns,生成新的数据框df

函数的具体定义如下:

def create_df_by_2col(dataframe, col_no_as_data, col_no_as_index, col_no_as_columns):
    columns = dataframe.columns.tolist() # 结果为 ['资源名', '国家', '年份', '储量']
    new_data_name = columns[col_no_as_data]
    new_index_name = columns[col_no_as_index]
    new_columns_name = columns[col_no_as_columns]
#    index_from_col = dataframe[new_index_name]
#    columns_from_col = dataframe[new_columns_name]
    index_from_col = dataframe.iloc[:,col_no_as_index].unique()
    columns_from_col = dataframe.iloc[:,col_no_as_columns].unique()
    # 创建一个空的dataframe
    df = pd.DataFrame(index = index_from_col, columns = columns_from_col)
    for row in dataframe.itertuples():
        # 如 df['金']['1960'] = 11
        df[getattr(row, new_columns_name)][getattr(row, new_index_name)] = getattr(row, new_data_name)
    return df

于是可通过如下代码得到结果

df_Shu = create_df_by_2col(data_Shu, -1, 2, 0)
df_Wu  = create_df_by_2col(data_Wu, -1, 2, 0)
df_Wei = create_df_by_2col(data_Wei, -1, 2, 0)

其中 df_Shu 的结果为:

       金   银   铜
1960  11  14  17
1961  12  15  18
1962  13  16  19

至此,该问题告一段落。

现在,思考在原数据框(不含铁)中,如果想以(金银铜铁)为columns,那该怎么办呢?

col_index = [1960,1961,1962]
col_columns = ['金','银','铜','铁']
df2_Shu = by_2col(data_Shu,-1,col_index,col_columns)

def by_2col(dataframe, col_data_index, col_index, col_columns):
    # 创建一个空的dataframe
    df = pd.DataFrame(index = col_index, columns = col_columns)
    for index, row in dataframe.iterrows():  
        row = row.tolist()
        df[row[0]][row[2]] = row[col_data_index] # 当然这些数字也可以变成函数的参数
    return df

最后,小编还是真诚地发问,有没有现成函数,能实现这样的功能?从这个dataframe中,以资源名列为columns,年份列为index,储量为数据,生成新的dataframe。

希望有答案的、或是有更好方法的,请不吝评论,谢谢!

------

今天问了下ChatGPT,了解到有这个函数可以实现:

# 以资源名列为columns,年份列为index,储量为数据,生成新的dataframe
data_Shu.pivot(columns='资源名',values='储值',index='年份')

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于Python的心脏病个人指数数据数据处理可以通过以下步骤完成: 1. 导入所需的库:常用的数据处理库包括pandas和numpy,首先需要导入这两个库。 2. 读取数据集:使用pandas的read_csv()函数读取数据集文件,将其转换为DataFrame格式。 3. 数据清洗:对于心脏病个人指数数据集,可能需要进行一些基本的数据清洗,例如去除缺失值或异常值。可以使用pandas的dropna()函数或fillna()函数来处理缺失值,使用numpy的clip()函数处理异常值。 4. 特征选择:根据析目标,选择与心脏病相关的特征子集。可以使用pandas的iloc()函数选择特定的列,或者使用pandas的drop()函数删除不需要的列。 5. 数据转换:某些特征可能需要进行数据转换,例如将类别型变量转换为数值型变量。可以使用pandas的map()函数或sklearn的LabelEncoder类来实现。 6. 特征缩放:对于一些机器学习算法,特征缩放是必要的。常用的特征缩放方法包括标准化和归一化。可以使用sklearn的StandardScaler类或MinMaxScaler类来进行特征缩放。 7. 数据划分:将数据划分为训练集和测试集,用于模型的训练和评估。可以使用sklearn的train_test_split()函数来完成。 8. 数据处理完成后,可以按照需要进行后续的数据析、建模和预测等操作。 以上是基于Python的心脏病个人指数数据数据处理的一般步骤,具体的实现可能因数据集的结构和需要的析目标而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值