操作列值时csv文件解析中的问题

v1uwarro  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(273)

我正在解析CSV文件,输出不符合预期。
输入:
| 优先|数据库名称|任务名称|分区|大小_gb|
| - -|- -|- -|- -|- -|
| 1|市场|tbl_市场|202301| 10|
| 1| Corp| tbl_corp1| 202301| 5|
| 1| Corp| tbl_corp1| 202302| 5|
| 1| Corp| tbl_corp1| 202303| 10|
| 1| Corp| tbl_corp2| 202301| 10|
| 1| Corp| tbl_corp3| 202302| 5|
| 1| Corp| tbl_corp3| 202303| 3|
| 1| Corp| tbl_corp3| 202304| 2|
| 2|销售|tbl_sales1| 202301| 1|
| 3|销售|tbl_sales2| 202302| 5|
预期输出:
| 优先|数据库名称|任务名称|分区|t尺寸|
| - -|- -|- -|- -|- -|
| 1|市场|tbl_市场|202301| XL|
| 1| Corp| tbl_corp1| 202301; 202302| XL|
| 1| Corp| tbl_corp1| 202303| XL|
| 1| Corp| tbl_corp2| 202301| XL|
| 1| Corp| tbl_corp3| 202302; 202303; 202304| XL|
| 2|销售|tbl_sales1| 202301| S|
| 3|销售|tbl_sales2| 202302| M|
以下是我尝试过的代码。

import os
import pandas as pd
import numpy as np

df = pd.read_csv("F:\\sales_data.csv", header=0)
print(df)

df = pd.DataFrame(df.pivot_table(
    index=['priority', 'db_name', 'tbl_name', 'size_gb'],
    values=['partition', 'size_gb'],
    aggfunc={'partition': lambda x: ";".join(str(v) for v in x), 'size_gb': 'sum'}).rename(
    columns={'size_gb': 'sum_gb'}).to_records())
df['t_size'] = np.where(df['sum_gb'] >= 10, 'XL',
                np.where(df['sum_gb'] < 3, 'S', 'M'))

df.drop(columns=['size_gb', 'sum_gb'], inplace=True)
print(df)

字符串
运行了上面的代码,但输出不是预期的。感谢任何输入
预期输出:


的数据

rkttyhzu

rkttyhzu1#

您确定预期的输出是正确的吗?

df.partition = df.partition.astype(str)

df = (
    df.groupby(['priority', 'db_name', 'tbl_name'], as_index=False)
      .agg({"partition": ";".join, "size_gb": "sum"})
      .rename(columns={"size_gb": "sum_gb"})
)

df['t_size'] = np.select(
    [df.sum_gb.ge(10), df.sum_gb.lt(3)], 
    ['XL', 'S'], 
    'M',
)
df = df.drop("sum_gb", axis=1)

print(df)

字符串
输出量:

priority db_name    tbl_name             partition t_size
0         1    corp   tbl_corp1  202301;202302;202303     XL
1         1    corp   tbl_corp2                202301     XL
2         1    corp   tbl_corp3  202302;202303;202304     XL
3         1  market  tbl_market                202301     XL
4         2   sales  tbl_sales1                202301      S
5         3   sales  tbl_sales2                202302      M

相关问题