我有一张表格,其中包含需要售出10天的每种产品的得分以及每种产品的可用性(产品总数= 10)

A   B   C   D
20  56  12  65
80  13  76  51
24  81  56  90
67  12  65  87
45  23  67  50
62  32  23  75
76  34  67  67
23  45  32  98
24  67  34  12
56  53  32  78


产品供应

A   3
B   2
C   3
D   2


首先,我必须对每种产品进行排名,并确定每天需要销售的商品的优先级。我能够做到这一点

import pandas as pd
df = pd.read_csv('test.csv')

new_df = pd.DataFrame()
num = len(list(df))
for i in range(1,num+1)  :
    new_df['Max'+str(i)] = df.T.apply(lambda x: x.nlargest(i).idxmin())

print(new_df)


那给我

  Max1 Max2 Max3 Max4
0    D    B    A    C
1    A    C    D    B
2    D    B    C    A
3    D    A    C    B
4    C    D    A    B
5    D    A    B    C
6    A    C    C    B
7    D    B    C    A
8    B    C    A    D
9    D    A    B    C


现在最困难的部分是如何创建表,该表包含每天要查看的Max1列要出售的产品,同时还要跟踪可用性。如果没有该产品,则选择下一个最大值。最终的df应该看起来像这样。

0   D
1   A
2   D
3   A
4   C
5   A
6   C
7   B
8   B
9   C


我为此感到震惊。任何帮助表示赞赏。谢谢。

最佳答案

import pandas as pd
df1=pd.read_csv('file1',sep='\s+',header=None,names=['product','available'])
print df1
df2=pd.read_csv('file2',sep='\s+')
print df2

maxy=[]
for i in range(len(df2)):
    if df1['available'][df1['product']==df2['Max1'][i]].values[0]>0:
        maxy.append(df2['Max1'][i])
        df1['available'][df1['product']==df2['Max1'][i]]=df1['available'][df1['product']==df2['Max1'][i]].values[0]-1
    elif df1['available'][df1['product']==df2['Max2'][i]].values[0]>0:
        maxy.append(df2['Max2'][i])
        df1['available'][df1['product']==df2['Max2'][i]]=df1['available'][df1['product']==df2['Max2'][i]].values[0]-1
    elif df1['available'][df1['product']==df2['Max3'][i]].values[0]>0:
        maxy.append(df2['Max3'][i])
        df1['available'][df1['product']==df2['Max3'][i]]=df1['available'][df1['product']==df2['Max3'][i]].values[0]-1
    elif df1['available'][df1['product']==df2['Max4'][i]].values[0]>0:
        maxy.append(df2['Max4'][i])
        df1['available'][df1['product']==df2['Max4'][i]]=df1['available'][df1['product']==df2['Max4'][i]].values[0]-1
    else:
        print ("Check")

pd.DataFrame(maxy)


输出:

 product  available
0       A          3
1       B          2
2       C          3
3       D          2
  Max1 Max2 Max3 Max4
0    D    B    A    C
1    A    C    D    B
2    D    B    C    A
3    D    A    C    B
4    C    D    A    B
5    D    A    B    C
6    A    C    C    B
7    D    B    C    A
8    B    C    A    D
9    D    A    B    C



    0
0   D
1   A
2   D
3   A
4   C
5   A
6   C
7   B
8   B
9   C


通过这个,我能够对任何数量的产品做到这一点

cols = list(df2)
maxy=[]

for i in range(len(df2)):
    for x in cols:
        if df1['available'][df1['product']==df2[x][i]].values[0]>0:
            maxy.append(df2[x][i])
            df1['available'][df1['product']==df2[x][i]]=df1['available'][df1['product']==df2[x][i]].values[0]-1
            break

final=pd.DataFrame(maxy)
print(final)


谢谢

关于python - 如何从多维数据框创建多条件一维数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60244154/

10-10 22:33