我有一個資料框,我想將每個 id 的資料放在一行中。每個 id 的某些列是不變的,而其中一些列是變化的。例如,以下示例中的 val1 和 val2 是常量。
所以,我想從這個資料框構建一個字典。鍵是id,值是一個串列,它是[每個id的行數,它的t,val1,val2]。這里是一個例子,對于 id=1 我們有 2 個 t,它的值是 1, 2,所以 '1': [2, 1, 2, 1, 5] 是第一個鍵和值。對于 id=2 我們有相同的薄。你能幫我解決這個問題嗎?謝謝
df = pd.DataFrame()
df['id'] = [1, 1, 2, 2, 2,2]
df['t'] = [1, 2, 3, 4, 5,6]
df['val1'] = [1,1,0,0,0,0 ]
df['val2'] = [5,5, 4, 4,4,4]
out:
dic = {'1': [2, 1, 2, 1, 5], '2': [4, 3, 4, 5,6, 0,4]}
uj5u.com熱心網友回復:
df.groupby('id').agg({'t':list, 'val1':'first', 'val2':'first'}).apply(lambda x: [len(x.t),*x.t,x.val1,x.val2], axis=1).to_dict()
uj5u.com熱心網友回復:
這只是蠻力。
import pandas as pd
df = pd.DataFrame()
df['id'] = [1, 1, 2, 2, 2,2]
df['t'] = [1, 2, 3, 4, 5,6]
df['val1'] = [1,1,0,0,0,0 ]
df['val2'] = [5,5, 4, 4,4,4]
print(df)
lastid = None
tval = []
rows = []
for i,row in df.iterrows():
if row['id'] != lastid:
if lastid:
rows.append( [len(tval)] tval save )
lastid = row['id']
tval = []
tval.append(row['t'])
save = [row['val1'],row['val2']]
rows.append( [len(tval)] tval save )
print(rows)
輸出:
id t val1 val2
0 1 1 1 5
1 1 2 1 5
2 2 3 0 4
3 2 4 0 4
4 2 5 0 4
5 2 6 0 4
[[2, 1, 2, 1, 5], [4, 3, 4, 5, 6, 0, 4]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/461322.html
