每个行值的循环次数

时间:2018-10-18 18:16:35

标签: python pandas

我的cust_valid Csv文件如下所示

Territory  NoOfCustomer
D00060     10
D00061     20
D00065     70
D00067     90

我必须根据NoOfCustomer的数量创建一个唯一ID,例如If NoOfCustomer <= 50 那么我必须为领地D00060创建10个不同的唯一ID,并为领地D00061创建10个不同的唯一ID。

我在这里以类似熊猫的格式读取我的csv文件

csv_file = 'cust_valid.csv'
df=pd.read_csv(csv_file,delimiter="|")

过滤出的客户<= 50

low_dense = df['NoOfCustomer'] <=50

然后像这样重复low_dense

for idx, item in df[low_dense].iterrows():
    ???

我在这里陷入了嵌套循环。我需要做一个嵌套循环,还是可以通过其他任何方式完成。

我的输出看起来像

Territory   NoOfCustomers    UniqueID
D00060       10              0001AB9BHBHB
D00060       10              0001AB8HHJJL
D00060       10              0001AB7JHJHJ
D00060       10              0001AB9EWGHJ
D00060       10              0001AB0JIJKJ

1 个答案:

答案 0 :(得分:0)

问题有点不清楚如何存储这些ID,但是如果要在同一行中存储它们,可以这样操作:

def f(x):
    return [str(uuid.uuid4()) for i in range(10)]

df = pd.DataFrame({"Territory": ['D60','D61','D65'], 'NoC': [10,20,70] })

df["Ids"] = df[df['NoC'] <=50].apply(f,axis =1)

这将在具有<= 50个客户的行上添加一个包含10个id的数组的列。

(在修改了相关输出之后)。您可以像这样继续:

df = pd.merge(df[['NoC','Territory']],df['Ids'].str.split(',',expand=True),left_index=True,right_index=True)
df = pd.melt(df,id_vars = ['NoC','Territory']).sort_values(['Territory','variable'])

哪一行将具有唯一的ID。