Bu yaklaşım nasıl yapılır? Verilerinizi 4 bilet satışı yapmak için biraz değiştirdim. Then, sadece bir çağrı numpy - update values using slicing given an array value
: burada, bu teknik gösterilmiştir a[np.arange(a.shape[1])[:] > a[:,0,np.newaxis]] = 0
:
Bir yardımcı np.ones() dizi, uygun büyüklükte ve daha sonra bir kod anahtarı hattı kullanmak .stack()
ve tamamlanması için bazı temel filtreleme. benziyor
d = {'1': ['20', 'NYC', '2'], '2': ['30', 'NYC', '2'], '3': ['5', 'NYC', '2'], \
'4': ['300', 'LA', '2'], '5': ['30', 'LA', '4'], '6': ['100', 'LA', '2']}
columns=['Price', 'City', 'Quantity']
df = pd.DataFrame.from_dict(data=d, orient='index')
df.columns = columns
df['Quantity'] = df['Quantity'].astype(int)
# make a ones array
my_ones = np.ones(shape=(len(df),df['Quantity'].max()))
# turn my_ones into a dataframe same index as df so we can join it to the right hand side. Plenty of other ways to achieve the same outcome.
df_my_ones = pd.DataFrame(data =my_ones,index = df.index)
df = df.join(df_my_ones)
:
Price City Quantity 0 1 2 3
1 20 NYC 2 1 1 1 1
3 5 NYC 2 1 1 1 1
2 30 NYC 2 1 1 1 1
5 30 LA 4 1 1 1 1
4 300 LA 2 1 1 1 1
artık numpy diziye Miktar sütunu ve olanları almak
a = df.iloc[:,2:].values
bu akıllı Biti olduğunu
a[np.arange(a.shape[1])[:] > a[:,0,np.newaxis]] = 0
ve df'ye yeniden atayın.
Price City Quantity 0 1 2 3
1 20 NYC 2 1 1 0 0
3 5 NYC 2 1 1 0 0
2 30 NYC 2 1 1 0 0
5 30 LA 4 1 1 1 1
4 300 LA 2 1 1 0 0
df.set_index(['Price','City','Quantity'],inplace=True)
df = df.stack().to_frame()
df.columns = ['sale_flag']
df.reset_index(inplace=True)
print df[['Price','City', 'Quantity']][df['sale_flag'] !=0]
print df
üretir:
Price City Quantity
0 20 NYC 2
1 20 NYC 2
4 5 NYC 2
5 5 NYC 2
8 30 NYC 2
9 30 NYC 2
12 30 LA 4
13 30 LA 4
14 30 LA 4
15 30 LA 4
16 300 LA 2
17 300 LA 2
http://stackoverflow.com
ve şimdi df biz Miktar sayıyı geçen sıfır olarak ayarlanır nasıl fark aşağıdaki gibi görünür/help/mcve - bunun için yazdığınız kod nerede ve hangi çıktı * siz * aldınız? İstediğiniz çıktıyı yeterince iyi tanımladınız, ancak bunun içinde StackOverflow sorusu yok gibi görünüyor. Unutmayın ki kod için * kodlama * kod tasarımı ve yazma değildir. – Prune
@Prune Ben katılmıyorum, bu belirli bir programlama probleminin açıklamasına uyuyor gibi görünüyor. OP, bu problemi çözmek için etkili bir yol belirlemede bazı rehberlik kullanabilir. Bazen bir kişi nereden başlayacağını bile bilmez ve bir çözümde çirkin bir girişimi soruyu çözer ve herkesin zamanını boşa harcar. –
@ Prune'un tavsiyesine minnettarım ve genelde buna katılıyorum. Bence bu tamamen tembel soruları filtrelemek için iyi bir yol. Bu sorun beni güldürdü ve bir çözüm için anlamlı bir başlangıç noktası sağlayamadım. – MRA