gpt4 book ai didi

python - 将 pandas 列分成两列,保持原始列在原位

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:54 25 4
gpt4 key购买 nike

我有一个数据框,我需要将其拆分为两列以保留原始列。

import pandas as pd
df = {'assigned_to': [
{'display_value': 'Michael', 'link': 'http://www.testlink.com'},
{'display_value': 'Vinod', 'link': 'http://www.testlink.com'},
{'display_value': 'Vinod', 'link': 'http://www.testlink.com'},
{'display_value': 'Carrie', 'link': 'http://www.testlink.com'},
{'display_value': 'Carrie', 'link': 'http://www.testlink.com'}]}
df = pd.DataFrame(df)

目前我正在尝试使用
df['assigned_to.display_value'] = df['assigned_to'].str.split(',', expand=True)

但是 assigned_to.display_value 会出现 NaN 因为它是人口。

我的预期结果是

     assigned_to.display_value    assigned_to.link          assigned_to
0 Michael http://www.testlink.com {'display_value': 'Michael', 'link': 'http://www.testlink.com'}
1 Vinod http://www.testlink.com {'display_value': 'Vinod', 'link': 'http://www.testlink.com'}
2 Vinod http://www.testlink.com {'display_value': 'Vinod', 'link': 'http://www.testlink.com'}
3 Carrie http://www.testlink.com {'display_value': 'Carrie', 'link': 'http://www.testlink.com'}
4 Carrie http://www.testlink.com {'display_value': 'Carrie', 'link': 'http://www.testlink.com'}

最佳答案

使用tolist将列转换为字典列表,通过调用构造函数创建一个新的数据框。

v = pd.DataFrame(df.assigned_to.tolist())
v

display_value link
0 Michael http://www.testlink.com
1 Vinod http://www.testlink.com
2 Vinod http://www.testlink.com
3 Carrie http://www.testlink.com
4 Carrie http://www.testlink.com

您现在可以使用 pd.concat 将新列连接到原始列:

pd.concat([v, df], 1)

display_value link \
0 Michael http://www.testlink.com
1 Vinod http://www.testlink.com
2 Vinod http://www.testlink.com
3 Carrie http://www.testlink.com
4 Carrie http://www.testlink.com

assigned_to
0 {'link': 'http://www.testlink.com', 'display_v...
1 {'link': 'http://www.testlink.com', 'display_v...
2 {'link': 'http://www.testlink.com', 'display_v...
3 {'link': 'http://www.testlink.com', 'display_v...
4 {'link': 'http://www.testlink.com', 'display_v...

时间

df = pd.concat([df] * 10000)
df = df.reset_index(drop=1)
%%timeit
v = pd.DataFrame(df.assigned_to.tolist())
pd.concat([v, df], 1)

10 loops, best of 3: 58.7 ms per loop
%timeit df.assigned_to.apply(pd.Series)
1 loop, best of 3: 17.5 s per loop

关于python - 将 pandas 列分成两列,保持原始列在原位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47441717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com