qq_39382851 2021-10-08 10:15 采纳率: 33.3%
浏览 141
已结题

DataFrame相关问题,望可详解

df_empty是1800行,256列的dataframe;df_pre是1800行75列dataframe。

我想用下面代码将data_pre里的的某个元素出现次数乘上它在data_pre里的最后一个位置数
"1/(1+pow(math.e,-l[-1]))"这样的函数作为新的newdata2的元素。df_empty.columns是很多名字,它包含了所有的data_pre里的所有元素。
这个代码很乱,而且跑出来结果还是全0的dataframe,崩溃了,求解决。

for i in range(len(df_empty.columns)): 
        for idx in range(1800):
            for j in range(len(data_pre.columns)-1):
                if df_empty.columns[i] in data_pre.iloc[j]:
                    l = data_pre.loc[idx][data_pre.loc[idx].values == df_empty.columns[i]].index
                    newdata2[i][idx] = data_pre.iloc[idx].tolist().count(df_empty.columns[i])*(1/(1+pow(math.e,-l[-1])))

  • 写回答

3条回答 默认 最新

  • Kappuccinno 2021-10-08 17:44
    关注

    这样可以

    
    import math
    import pandas as pd
    import numpy as np
    #所有的读取文件均删除了索引列,这些代码不集中展现,以后保存csv的时候注明to_csv=false
    data_pre=pd.read_csv('data_pre.csv')
    data_pre['row']=data_pre.index#注明数据的行
    #reshape成长数据,写成每一个名字对应某行某列的形式
    data_shape=pd.melt(data_pre,id_vars='row',value_vars=data_pre.columns[:-2],var_name='col',value_name='name')
    #把列名转为整形
    data_shape['col']=data_shape['col'].astype("int")
    #以行-名字对列进行分类汇总统计,max就是每行最后出现的那个列所以是最大值
    group_data=data_shape.groupby(['row','name'])['col'].agg(['count','max'])
    #你可以单独运行这个语句print一下看看有什么区别
    group_data=group_data.reset_index()
    #函数对应
    group_data['result']=group_data['count']/(1+math.e**(-group_data['max']))
    #变成宽数据,此时名字变成了各个列名
    wide_data=group_data.pivot(index='row',columns='name',values='result')
    #行中没有该名字的本为缺失,替换为0
    wide_data.fillna(0,inplace=True)
    empty_csv=pd.read_csv('df_empty.csv')#读取目标列名
    null_data=np.zeros((len(wide_data),len(empty_csv.columns)))
    resort=pd.DataFrame(data=null_data,columns=empty_csv.columns)#先建立一个1800*249的空数据
    for each in resort:
        resort[each]=wide_data[each]#逐列对应补充
    resort.to_csv('result.csv',index=False)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月16日
  • 已采纳回答 10月8日
  • 创建了问题 10月8日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号