所以,在這里我想從第 1 列中獲取前 3 個字符(僅字母/否)和第 2 列中的前 4 個字符(僅字母/否)和來自 column3a、column3b、column3c 和 column3d(以存在者為準)的前 5 個數字和像下面給出的所需輸出列一樣制作它們的陣列。條件是我需要洗掉任何型別的特殊字符,如 .,-,' 等和空格,并且只取字母和數字字符。如果有的話,輸出也應該是 NaN列 1、2 或 3 不存在。(如果 1 和 2 都存在且第 3 列中的 1 存在,則應該輸出。
Column1 Column2 Colum3a Colum3b Colum3c Colum3d S.NO DESIRED OUTPUT
ABCDE QWERTY 12345678 1223456 234567 1234589 1
T.BCDF W ERTY 567890 NaN NaN NaN 2
ERTYUMH TY-IOPU 9845366 5672341 NaN NaN 3
NaN ERTYUI 1986788 NaN NaN NaN 4
SA--RTYUNK QWPOIJH NaN NaN 34564557 NaN 5
WQER QWER NaN NaN NaN NaN 6
S'E WERTER 12233412 NaN NaN 5678908 7
所需的輸出列應如下所示:
DESIRED OUTPUT S.NO
["ABC|QWER|12345","ABC|QWER|12234","ABC|QWER|23456","ABC|QWER|12345"] 1
[TBC|WER|56789] 2
["ERT|TYIO|98453","ERT|TYIO|56723"] 3
NaN 4
[SAR|QWPO|34564] 5
NaN 6
["SE|WERT|12233","SE|WERT|56789"] 7
請幫我解決這個問題。我使用下面的代碼進行連接,但不知道如何使用第三列制作陣列。
df1['column4'] = (df1['Column1'].str[:3] '|'
df1['Column2'].str[:4] '|'
df1['Column3'].astype(str).replace({'^nan$':None, '\.0$':''}, regex=True))
uj5u.com熱心網友回復:
用:
#join first 3 and 4 values in columns
s = (df1['Column1'].str.replace('\W','').str[:3] '|'
df1['Column2'].str.replace('\W','').str[:4] '|' )
#all another columns convert to strings, replace and add to s
f = lambda x: s x.astype(str).replace({'^nan$':None, '\.0$':''}, regex=True).str[:5]
#for column filtered by name ('Colum3') add values to list
df1 = (df1.filter(like='Colum3').apply(f)
.stack()
.groupby(level=0)
.agg(list)
.to_frame('new')
.join(df['S.NO'], how='right'))
print (df1)
new S.NO
0 [ABC|QWER|12345, ABC|QWER|12234, ABC|QWER|2345... 1
1 [TBC|WERT|56789] 2
2 [ERT|TYIO|98453, ERT|TYIO|56723] 3
3 NaN 4
4 [SAR|QWPO|34564] 5
5 NaN 6
6 [SE|WERT|12233, SE|WERT|56789] 7
uj5u.com熱心網友回復:
這是作為管道的解決方案,它應該適用于任意數量的列。唯一的要求是應該能夠過濾列名(這里使用Column和Colum3作為模式),否則需要構建這些列的串列并使用經典切片:
(df.filter(like='Column').apply(lambda c: c.str.replace('\W', '', regex=True).str[:3])
.join(df['S.NO DESIRED OUTPUT'])
.assign(Column3=df.filter(like='Colum3').apply(list, axis=1))
.explode('Column3').dropna(subset=['Column3'])
.assign(Column3=lambda d: d['Column3'].astype(str).str[:5])
.set_index('S.NO DESIRED OUTPUT')
.astype(str)
.apply('|'.join, axis=1)
.groupby(level=0).apply(list)
.rename('DESIRED OUTPUT')
.mask(df.filter(like='Column').isna().any(1))
.reset_index()
)
輸出:
S.NO DESIRED OUTPUT DESIRED OUTPUT
0 1 [ABC|QWE|12345, ABC|QWE|12234, ABC|QWE|23456, ...
1 2 [TBC|WER|56789]
2 3 NaN
3 4 [nan|ERT|19867]
4 5 [SAR|QWP|34564]
5 7 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/365549.html
