請建議如何執行以下premutations:
array = [1, 3, 2] (numpy.ndarray)
l1 = ['foo_qwe1_ert1', 'bar_qwe2_ert2', 'baz_qwe3_ert3'] (list)
我需要獲得以下熊貓資料框:
| 第一列 | 第 2 列 | 第 3 列 |
|---|---|---|
| 富 | qwe1 | 1 |
| 巴茲 | qwe3 | er3 |
| 酒吧 | qwe2 | er2 |
問題是串列包含從 0 到 30(格式:XXX_YYY_ZZZ)的文本標簽,并且 numpy.array 具有形狀(3536,)并包含從 0 到 30 的數字。我需要為陣列中的每個數字分配標簽并將其保存為熊貓資料框
uj5u.com熱心網友回復:
首先使用DataFrame建構式split:
df = pd.DataFrame([x.split('_') for x in l1], columns=['Column1', 'Column2', 'Column3'])
print (df)
Column1 Column2 Column3
0 foo qwe1 ert1
1 bar qwe2 ert2
2 baz qwe3 ert3
然后通過array從最后一列中提取最后一個整數來更改順序:
df.index = df['Column3'].str.extract('(\d )$', expand=False).astype(int)
df = df.loc[array].reset_index(drop=True)
print (df)
Column1 Column2 Column3
0 foo qwe1 ert1
1 baz qwe3 ert3
2 bar qwe2 ert2
編輯:
array = np.array([1, 3, 2])
l1 = ['foo_qwe1_ert1', 'bar_qwe2_ert2', 'baz_qwe3_ert3']
L = [x.split('_') for x in l1]
a, b, c = L[0]
b = b.replace('1','')
c = c.replace('1','')
print (b, c)
qwe ert
out = [(y[0], f'{b}{x}', f'{c}{x}') for x, y in zip(array, L)]
print (out)
[('foo', 'qwe1', 'ert1'), ('bar', 'qwe3', 'ert3'), ('baz', 'qwe2', 'ert2')]
或者:
out = [(y[0], f'qwe{x}', f'ert{x}') for x, y in zip(array, L)]
print (out)
[('foo', 'qwe1', 'ert1'), ('bar', 'qwe3', 'ert3'), ('baz', 'qwe2', 'ert2')]
df = pd.DataFrame(out, columns=['Column1', 'Column2', 'Column3'])
print (df)
Column1 Column2 Column3
0 foo qwe1 ert1
1 bar qwe3 ert3
2 baz qwe2 ert2
uj5u.com熱心網友回復:
你可以只使用:
df = pd.DataFrame(data={'list':['foo_qwe1_ert1', 'bar_qwe2_ert2', 'baz_qwe3_ert3']})
df[['Column1', 'Column2', 'Column3']] = df['list'].str.split('_', expand=True)
df.drop(columns=['list'], inplace=True)
OUTPUT:
Column1 Column2 Column3
0 foo qwe1 ert1
1 bar qwe2 ert2
2 baz qwe3 ert3
或者
l = ['foo_qwe1_ert1', 'bar_qwe2_ert2', 'baz_qwe3_ert3']
df = pd.DataFrame()
df[['Column1', 'Column2', 'Column3']] = pd.Series(l).str.split('_', expand=True)
print(df)
uj5u.com熱心網友回復:
您可以使用str.split然后reindex:
df = pd.Series(l1).str.split('_', expand=True)
df.index = [1,2,3]
df = df.reindex(array).reset_index(drop=True).rename(columns={i:'Column' str(i 1) for i in df.columns})
輸出:
Column1 Column2 Column3
0 foo qwe1 ert1
1 baz qwe3 ert3
2 bar qwe2 ert2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/388303.html
上一篇:在字典串列中查找重復值
下一篇:堅持撰寫python串列縮減程式
