Python 如何从多维数据帧创建多条件1D数据帧

Python 如何从多维数据帧创建多条件1D数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个表,表中列出了每种需要销售10天的产品的得分以及每种产品的可用性(产品总数=10) 产品可用性 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) :

我有一个表,表中列出了每种需要销售10天的产品的得分以及每种产品的可用性(产品总数=10)

产品可用性

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)

谢谢

谢谢你。我将尝试找出如何使这成为一个功能,因为产品的数量可能会发生变化。再次感谢您的帮助。当然,考虑到产品的数量,这会很有帮助。如果您觉得这很有帮助并回答了您的问题,您需要检查绿色标记。
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)