lizy169 发表于 2021-11-12 22:39

python中groupby输出数据和源数据不符

请教大佬、师兄、师姐

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


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

链接: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"))

#   根据上一步得到的文件名列表,遍历所有文件,放入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=)

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

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

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

cqfcy 发表于 2021-11-12 22:39

lizy169 发表于 2021-11-13 15:56
谢谢!
去掉0后,总数量是对了,但3个分类的数据还是不对,正确的应该是3个分类的SUM=总数量才对。
还 ...
最后分类的那三行代码替换为这个
output.loc] = stock_data.groupby('category')['quantity'].apply(sum).to_list()
如果只需要其中某一类,就按下面的方式按需开关代码吧
output.loc = stock_data.groupby('category')['quantity'].apply(sum)
output.loc = stock_data.groupby('category')['quantity'].apply(sum)
output.loc = stock_data.groupby('category')['quantity'].apply(sum)

choolyee 发表于 2021-11-12 23:56

貌似是groupby字段写错了
试试date = stock_data.groupby(stock_data['quantity'])

xiaoshu1688 发表于 2021-11-13 08:19

现在这个PYTHON还是有很大市场。

cqfcy 发表于 2021-11-13 10:18

读取csv的时候parse_dates=将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=将quantity转换为object了,去掉这个参数读取为int就OK了

谢谢!
去掉0后,总数量是对了,但3个分类的数据还是不对,正确的应该是3个分类的SUM=总数量才对。
还有,如果我只要输出其中一个类的数据,其它两个类的不需要输出显示出来,该怎样弄?

lizy169 发表于 2021-11-15 10:17

cqfcy 发表于 2021-11-12 22:39
最后分类的那三行代码替换为这个
output.loc ...

非常感谢你!
谢谢!!
{:1_893:}{:1_893:}{:1_893:}
页: [1]
查看完整版本: python中groupby输出数据和源数据不符