You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中用类从DataFrame获取数据并随机选择卡车

问题描述

我有如下DataFrame,希望用类来定义数据结构。请问如何通过变量随机选择卡车?例如当选中Truck 1时,从DataFrame中返回对应数据:idnum = 1、trucktype = 'int'、arrival = 1、productlist = Product1与Product2的和=(3+2,5+0,8+9)=(5,5,17)。

原始代码
# Dataframe:
import pandas as pd
dictionary = {
    'TruckName': [1, 2, 3], 
    'Type': ['int','out','out'], 
    'Arrival': [1, 2, 1,],
    'Process': [4,7,8],
    'Product1': [3,5,8],
    'Product2': [2,0,9],
    }
df = pd.DataFrame(dictionary)

# define truck:
class Truck:
    def __init__(self,**kwargs):
        if 'idnum' in kwargs:
            self.idnum=kwargs['idnum'] 
        if 'truckType' in kwargs:
            self.truckType=kwargs['truckType']
        if 'productList' in kwargs:
            self.productList=kwargs['productList']
        if 'arrival' in kwargs:
            self.arrival=kwargs['arrival']
解决方案

1. 完善Truck类

调整Truck类的初始化逻辑,添加类方法实现从DataFrame行数据直接创建实例,同时自动计算你需要的productList:

import pandas as pd
import random

class Truck:
    def __init__(self, idnum, truck_type, arrival, product_list):
        self.idnum = idnum
        self.truckType = truck_type
        self.arrival = arrival
        self.productList = product_list
    
    @classmethod
    def from_df_row(cls, row, df):
        # 计算所有卡车的Product1与Product2的和,生成元组
        all_product_sums = tuple(df['Product1'] + df['Product2'])
        return cls(
            idnum=row['TruckName'],
            truck_type=row['Type'],
            arrival=row['Arrival'],
            product_list=all_product_sums
        )
    
    def __repr__(self):
        # 自定义实例打印格式,方便查看结果
        return f"Truck(idnum={self.idnum}, truckType='{self.truckType}', arrival={self.arrival}, productList={self.productList})"

2. 实现随机选择逻辑

编写函数完成随机选卡车并返回对应Truck实例的功能:

def random_pick_truck(df):
    # 随机选一个卡车ID
    random_truck_id = random.choice(df['TruckName'].tolist())
    # 筛选出对应行数据
    selected_row = df[df['TruckName'] == random_truck_id].iloc[0]
    # 创建并返回Truck实例
    return Truck.from_df_row(selected_row, df)

3. 测试验证

# 初始化DataFrame
dictionary = {
    'TruckName': [1, 2, 3], 
    'Type': ['int','out','out'], 
    'Arrival': [1, 2, 1,],
    'Process': [4,7,8],
    'Product1': [3,5,8],
    'Product2': [2,0,9],
}
df = pd.DataFrame(dictionary)

# 测试选中Truck 1的场景
truck1_row = df[df['TruckName'] == 1].iloc[0]
truck1 = Truck.from_df_row(truck1_row, df)
print(truck1)
# 输出:Truck(idnum=1, truckType='int', arrival=1, productList=(5, 5, 17))

# 测试随机选择
random_truck = random_pick_truck(df)
print(random_truck)
# 随机输出某辆卡车的信息,比如:Truck(idnum=3, truckType='out', arrival=1, productList=(5, 5, 17))

可选调整

如果你的实际需求是仅返回选中卡车自身的Product1+Product2值,而非所有卡车的总和,只需修改from_df_row方法中的计算逻辑:

@classmethod
def from_df_row(cls, row, df):
    # 仅计算当前卡车的Product1+Product2
    product_sum = (row['Product1'] + row['Product2'],)
    return cls(
        idnum=row['TruckName'],
        truck_type=row['Type'],
        arrival=row['Arrival'],
        product_list=product_sum
    )

内容的提问来源于stack exchange,提问作者Koala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:13:29