मेरे पास दो सूचियाँ हैं, उनमें से एक कुछ पंक्तियाँ हैं, और दूसरी इन पंक्तियों के लिए कुछ मान इस प्रकार हैं:

text = ['Hello, ','I need some help in here ','things are not working well ','so i posted ','this question here ','hoping to get some ','good ','answers ','out of you ','that\'s it ','thanks']
value = [1,1,0,1,1,1,0,1,1,0,1]

लक्ष्य किसी भी तरह से इस परिणाम को प्राप्त करने के लिए, लगातार 1 मान को पूरा करने वाली पंक्तियों को जोड़ना है:

['Hello ,I need some help in here ',
 'so i posted this question here hoping to get some',
 'answers out of you ',
 'thanks']

मैंने इसे डेटाफ्रेम के रूप में रखने की कोशिश की लेकिन मुझे नहीं पता था कि कैसे आगे बढ़ना है (समाधान में पांडा का उपयोग करना जरूरी नहीं है)

print(pd.DataFrame(data={"text":text,"value":value}))
                            text  value
0                        Hello,       1
1      I need some help in here       1
2   things are not working well       0
3                   so i posted       1
4            this question here       1
5            hoping to get some       1
6                          good       0
7                       answers       1
8                    out of you       1
9                     that's it       0
10                        thanks      1

कुछ उत्तरों की प्रतीक्षा में

0
A.Rahman Mahmoud 20 जिंदा 2021, 10:44

3 जवाब

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

पंडों का उपयोग करने की कोई आवश्यकता नहीं है:

tmp_str = ""
results = []
for chuck, is_evolved in zip(text, value):
    if is_evolved:
        tmp_str += chuck
    else:
        results.append(tmp_str)
        tmp_str = ""
if tmp_str:
    results.append(tmp_str)
print(results)
        
1
Tom Chen 20 जिंदा 2021, 10:59

यदि आप pandas दृष्टिकोण चाहते हैं तो आप pandas.Series.cumsum, pandas.DataFrame.groupby, df.groupby.transform और aggregate str.join, और फिर उन इंडेक्स तक पहुंचें जहां value 1 है:

>>> df.groupby(
            df['value'].ne(df['value'].shift(1)
            ).cumsum()
        ).transform(' '.join)[df['value'].eq(1)].drop_duplicates()
                                                 text
0                     Hello, I need some help in here
3   so i posted this question here hoping to get some
7                                  answers out of you
10                                             thanks

व्याख्या

>>> df['value'].ne(df['value'].shift(1)).cumsum()
0     1
1     1
2     2
3     3
4     3
5     3
6     4
7     5
8     5
9     6
10    7
Name: value, dtype: int32

>>> df.groupby(df['value'].ne(df['value'].shift(1)).cumsum()).transform(' '.join)
                                                 text
0                     Hello, I need some help in here
1                     Hello, I need some help in here
2                         things are not working well
3   so i posted this question here hoping to get some
4   so i posted this question here hoping to get some
5   so i posted this question here hoping to get some
6                                                good
7                                  answers out of you
8                                  answers out of you
9                                           that's it
10                                             thanks

यदि आपको डेटाफ़्रेम की आवश्यकता नहीं है, तो आप itertools का उपयोग कर सकते हैं .groupbyzip (text, value) के ped मान और दूसरे तत्व, यानी value के अनुसार समूहीकृत करें। फिर str.join समूह का पाठ भाग यदि कुंजी == 1

>>> from itertools import groupby
>>> [' '.join([*zip(*g)][0]) for k, g in groupby(zip(text, value), lambda x: x[1]) if k]
['Hello,  I need some help in here ',
 'so i posted  this question here  hoping to get some ',
 'answers  out of you ',
 'thanks']
1
Cyttorak 20 जिंदा 2021, 11:31

समाधान

pandas का उपयोग करके पाइथोनिक बिना का उपयोग करना:

text_ = [text[count] for count, n in enumerate(value) if n == 1]

विवरण

यह सूची आइटम को text में count पर लूप में ले जाएगा यदि value में सूची आइटम 1 के बराबर है।

आउटपुट

['Hello, ', 'I need some help in here ', 'so i posted ', 'this question here ', 'hoping to get some ', 'answers ', 'out of you ', 'thanks']
0
jwjhdev 20 जिंदा 2021, 11:11