吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1107|回复: 7
收起左侧

[求助] python中groupby输出数据和源数据不符

[复制链接]
lizy169 发表于 2021-11-12 22:39
25吾爱币
请教大佬、师兄、师姐

为啥我用groupby输出的数据和源数据对不上哦?
差十万八千里


附件很小,才几KB,论坛上传不了,只能传百度网盘,请大神帮忙指点指点,多谢!!

链接:https://pan.baidu.com/s/1PoTUfCYaLT2rpem5zuLGGg
提取码:rvb1


import numpy as np
import pandas as pd
import os

#   遍历数据文件夹中所有文件的文件名,得到清单列表file_list
file_list = []
for root, dirs, files in os.walk("E:/GP数据分析/123/"):  # 填写数据文件夹的路径
    if files:
        for f in files:
            if ".csv" in f:
                file_list.append(f.split(".csv")[0])

#   根据上一步得到的文件名列表,遍历所有文件,放入output变量中
output = pd.DataFrame()

#   遍历每个文件
for f in file_list:
    code = f.split()[-1].split()  # 读取日期代码
    print(code)

    # 读取数据
    stock_data = pd.read_csv('E:/GP数据分析/123/' + f + '.csv', parse_dates=[0])

    # 计算并输入到New文件
    l = len(output)
    output.loc[l, '日期'] = code  # 将遍历的文件名输出到新文件”日期“列;
    output.loc[l, '数量'] = stock_data['quantity'].sum()

    #   date = stock_data.groupby('quantity')['category'].sum() #   按照类型分类,并求分类后数量和
    output.loc[l, '分类0'] = stock_data.groupby('category')['quantity'].apply(
        lambda i: i.iloc[0] if len(i) > 1 else np.nan).sum()
    output.loc[l, '分类1'] = stock_data.groupby('category')['quantity'].apply(
        lambda i: i.iloc[1] if len(i) > 1 else np.nan).sum()
    output.loc[l, '分类2'] = stock_data.groupby('category')['quantity'].apply(
        lambda i: i.iloc[2] if len(i) > 1 else np.nan).sum()

#   输出每个文件的计算结果到新文件中
output.to_csv('E:/GP数据分析/NEW.csv', index=False, encoding='gbk')
print(output)

最佳答案

查看完整内容

最后分类的那三行代码替换为这个 如果只需要其中某一类,就按下面的方式按需开关代码吧 [mw_shl_code=python,true]output.loc[l, '分类0'] = stock_data.groupby('category')['quantity'].apply(sum)[0] output.loc[l, '分类1'] = stock_data.groupby('category')[' ...

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wfmiss + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

cqfcy 发表于 2021-11-12 22:39
lizy169 发表于 2021-11-13 15:56
谢谢!
去掉0后,总数量是对了,但3个分类的数据还是不对,正确的应该是3个分类的SUM=总数量才对。
还 ...

最后分类的那三行代码替换为这个
[Python] 纯文本查看 复制代码
output.loc[l, ['分类0', '分类1', '分类2']] = stock_data.groupby('category')['quantity'].apply(sum).to_list()

如果只需要其中某一类,就按下面的方式按需开关代码吧
[Python] 纯文本查看 复制代码
output.loc[l, '分类0'] = stock_data.groupby('category')['quantity'].apply(sum)[0]
output.loc[l, '分类1'] = stock_data.groupby('category')['quantity'].apply(sum)[1]
output.loc[l, '分类2'] = stock_data.groupby('category')['quantity'].apply(sum)[2]
choolyee 发表于 2021-11-12 23:56
貌似是groupby字段写错了
试试date = stock_data.groupby(stock_data['quantity'])
xiaoshu1688 发表于 2021-11-13 08:19
cqfcy 发表于 2021-11-13 10:18
读取csv的时候parse_dates=[0]将quantity转换为object了,去掉这个参数读取为int就OK了
 楼主| lizy169 发表于 2021-11-13 11:15
choolyee 发表于 2021-11-12 23:56
貌似是groupby字段写错了
试试date = stock_data.groupby(stock_data['quantity'])

谢谢你的回复,我按照你的方法试了,还是不行,
 楼主| lizy169 发表于 2021-11-13 15:56
cqfcy 发表于 2021-11-13 10:18
读取csv的时候parse_dates=[0]将quantity转换为object了,去掉这个参数读取为int就OK了

谢谢!
去掉0后,总数量是对了,但3个分类的数据还是不对,正确的应该是3个分类的SUM=总数量才对。
还有,如果我只要输出其中一个类的数据,其它两个类的不需要输出显示出来,该怎样弄?
屏幕截图 2021-11-13 154945.png
 楼主| lizy169 发表于 2021-11-15 10:17
cqfcy 发表于 2021-11-12 22:39
最后分类的那三行代码替换为这个
[mw_shl_code=python,true]output.loc[l, ['分类0', '分类1', '分类2'] ...

非常感谢你!
谢谢!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表