bla*_*ite 2 python dataframe pandas
我有一个这样的数据框:
id other_id_1 other_id_2 other_id_3
1 100 101 102
2 200 201 202
3 300 301 302
Run Code Online (Sandbox Code Playgroud)
我要这个:
id other_id
1 100
1 101
1 102
2 200
2 201
2 202
3 300
3 301
3 302
Run Code Online (Sandbox Code Playgroud)
我可以像这样轻松获得我想要的输出:
to_keep = {}
for idx in df.index:
identifier = df.loc[idx]['id']
to_keep[identifier] = []
for col in ['other_id_1', 'other_id_2', 'other_id_3']:
row_val = df.loc[idx][col]
to_keep[identifier].append(row_val)
Run Code Online (Sandbox Code Playgroud)
这给了我这个:
{1: [100, 101, 102], 2: [200, 201, 202], 3: [300, 301, 302]}
Run Code Online (Sandbox Code Playgroud)
我可以轻松地将其写入文件。然而,我正在努力在本地大熊猫中做到这一点。我想这个看似转位会更直接,但我正在努力......
好吧,如果您还没有,请将其设置id为索引:
>>> df
id other_id_1 other_id_2 other_id_3
0 1 100 101 102
1 2 200 201 202
2 3 300 301 302
>>> df.set_index('id', inplace=True)
>>> df
other_id_1 other_id_2 other_id_3
id
1 100 101 102
2 200 201 202
3 300 301 302
Run Code Online (Sandbox Code Playgroud)
然后,您可以简单地使用pd.concat:
>>> df = pd.concat([df[col] for col in df])
>>> df
id
1 100
2 200
3 300
1 101
2 201
3 301
1 102
2 202
3 302
dtype: int64
Run Code Online (Sandbox Code Playgroud)
如果您需要对值进行排序:
>>> df.sort_values()
id
1 100
1 101
1 102
2 200
2 201
2 202
3 300
3 301
3 302
dtype: int64
>>>
Run Code Online (Sandbox Code Playgroud)