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