यहाँ डेटासेट है

import pandas as pd
d = {'Key':['A','A','A','A'],'Rank':[1,2,3,4],'col1': [15000,12000,6000,7000], 'col2': [15000,10000,0,0],'col4': [10000,10000,10000,10000],'col5': [0,0,0,0] }
df = pd.DataFrame(data=d)
df

enter image description here

  • Col1= अधिकतम मान जो इसे ले सकते हैं
  • Col2=वर्तमान मान जो इसे धारण करता है
  • Col4: शेष मान जो इनमें से किसी भी रिकॉर्ड में फिट होना चाहिए।

मैं संभावित अधिकतम मूल्य के साथ 'col5' भरने की कोशिश कर रहा हूं। जहां 'Col1' इसकी अधिकतम सीमा को परिभाषित करता है और 'col2' इसका वर्तमान मूल्य दिखाता है। यदि यह अधिकतम मान पर फिट बैठता है तो अगली पंक्ति पर जाएँ। वह मान जो फिट हो सकता है वह 'col4' द्वारा निर्धारित किया जाता है। कृपया नीचे उदाहरण देखें।

उदाहरण:

  • रैंक 1 Col1=15000 और col2=15000 के साथ पहला रिकॉर्ड फिर अगली पंक्ति में जाएँ।
  • रैंक2 col1=12000 और col2=10000 के साथ दूसरा रिकॉर्ड। यहां हम देख सकते हैं कि इसकी अधिकतम 12000 है, इसलिए मैं 2000 और जोड़ सकता हूं, यह भी सुनिश्चित करने की आवश्यकता है कि col5>2000 इसलिए col5=2000 और col4 अगले रिकॉर्ड के लिए 10000-2000 = 8000 होगा

यहाँ अंतिम डेटासेट है जो इस तरह दिखना चाहिए

enter image description here

नीचे वह कोड है जिसे मैंने आजमाया है

for index, row in df.iterrows():
    #print(row['col1'], row['col2'])
    if row['col1']>row['col2']:
        
        if (row['col1']-row['col2'])<row['col2']:
            row['col5']=row['col1']-row['col2']
        else:
            row['col5']=row['col2']
    #return
    print(row['col1'], row['col2'],row['col5'])
0
HKE 25 सितंबर 2020, 17:57

1 उत्तर

सबसे बढ़िया उत्तर

यह आपका सामान करना चाहिए (एकाधिक चाबियों के साथ अद्यतन):

import pandas as pd

d = {'Key': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'Rank': [1, 2, 3, 4, 1, 2, 3, 4],
 'col1': [15000, 12000, 6000, 7000, 15000, 12000, 6000, 7000], 'col2': [15000, 10000, 0, 0, 15000, 10000, 0, 0],
 'col4': [10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000], 'col5': [0, 0, 0, 0, 0, 0, 0, 0]}
df = pd.DataFrame(data=d)
print(df)

df_result = pd.DataFrame()

for group in df.groupby(df.Key):
    tmp_value = 0
    df_tmp = group[1]
    for index, row in df_tmp.iterrows():
        if tmp_value == 0:
            tmp_value = row['col4']
        # print(row['col1'], row['col2'])
        if row['col1'] > row['col2']:
            diff_value = row['col1'] - row['col2']
            if diff_value < tmp_value:
                df_tmp.at[index, 'col5'] = row['col1'] - row['col2']
                tmp_value = tmp_value - diff_value
            else:
                df_tmp.at[index, 'col5'] = tmp_value
                break
    df_result = df_result.append(df_tmp)

print(df_result)

कुछ संकेत:
समय के साथ घटने के लिए tmp_value कॉलम 4 से डेटा रखता है।
आपको break से ब्रेक लेना चाहिए, मेरे दिमाग में बाहर निकलने के साथ नहीं
यहां आप पांडा पंक्तियों को पुनरावृति के दौरान संपादित करने के बारे में पढ़ सकते हैं: पंक्ति दर पंक्ति पुनरावृति करते हुए पांडा में डेटाफ़्रेम अपडेट करें
संपादित करें: आप पहले मुख्य डेटा भी प्राप्त कर सकते हैं और 'col4'-डेटा को एक सरणी में सहेज सकते हैं और मूल डेटाफ़्रेम को सीधे बदल सकते हैं, लेकिन यह आपके ऊपर है

1
D-E-N 28 सितंबर 2020, 19:47