我有一個元組,我需要將其轉換為資料框。
res1_ = [
('z1', '1'),
('z1', '2'),
('x1', '1'),
('x2', '1'),
('x1', '3'),
('z1', '1')]
我預期的資料框應該是這樣的:
docid secid
z1 [1,2]
x1 [1]
x2 [1]
x1 [3]
z1 [1]
如果您注意到,順序不會更改,并且如果 docid 在下一行中重復,則兩個 secid 將合并到一個串列中。盡管 x1 出現了兩次,但 sec id 1 和 3 不在單個串列中,因為我們在 x1 中間有 docid x2。
我試過:
df = pd.DataFrame(res1_,columns=['docid','secid'])
df.groupby('docid')['secid'].apply(list)
但是沒有運氣,因為我失去了訂單并且 x1 也被分組。
任何指標表示贊賞。
謝謝你。
uj5u.com熱心網友回復:
您可以使用 DataFrame 建構式,然后GroupBy.agg:
df = pd.DataFrame(res1_, columns=['docid', 'setid'])
group = df['docid'].ne(df['docid'].shift()).cumsum()
df = df.groupby(group.values).agg({'docid': 'first', 'setid': list})
輸出:
docid setid
1 z1 [1, 2]
2 x1 [1]
3 x2 [1]
4 x1 [3]
5 z1 [1]
uj5u.com熱心網友回復:
您可以使用itertools.groupby對資料進行分組,然后轉換為資料框:
from itertools import groupby
grps = [(k, [t[1] for t in g]) for k, g in itertools.groupby(res1_, key=lambda x:x[0])]
df = pd.DataFrame(grps, columns=['docid', 'secid'])
輸出:
docid secid
0 z1 [1, 2]
1 x1 [1]
2 x2 [1]
3 x1 [3]
4 z1 [1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/493405.html
