gpt4 book ai didi

python-3.x - 如何基于数据框 Pandas 的唯一首字母构建新列

转载 作者:行者123 更新时间:2023-12-03 09:55:18 24 4
gpt4 key购买 nike

我有数千个主机名,我希望根据它们的前三个首字母将它们分配到不同的列中。我看到如果它的小 list 和我知道首字母但我的 list 很大,可以做到这一点。
我有很多谷歌,但没有得到任何适当的提示,尝试了df.assign,但这不是很合适。
主机名示例:

fox001
fox002
fox003
fox004
fox005
fox006
dbx001
dbx002
dbx003
dbx004
dbx005
dbx006
trd001
trd002
trd003
trd004
trd005
trd006
spl001
spl002
spl003
spl004
spl005
spl006
预期结果:
fox_host   db_host  trd_host spl_host (<-- column names)
fox001 dbx001 trd001 spl001
fox002 dbx002 trd002 spl002
fox003 dbx003 trd003 spl003
fox004 dbx004 trd004 spl004
fox005 dbx005 trd005 spl005
fox006 dbx006 trd006 spl006
我的数据框:
df = pd.read_csv('inventory_hostanme',header=None).rename( columns={ 0:"hostnames"})
print(df)

hostnames
fox001
fox002
fox003
fox004
fox005
fox006
dbx001
dbx002
dbx003
dbx004
dbx005
dbx006
trd001
trd002
trd003
trd004
trd005
trd006
spl001
spl002
spl003
spl004
spl005
spl006

最佳答案

使用 Series.groupby 在主机值的第一个hostnames字母上将three列分组,然后将 pd.concat axis=1结合使用,以合并每个分组的数据框,从而为每个主机创建一个单独的列的新数据框:

hosts = pd.concat([
g.rename(f'{k}_host').reset_index(drop=True)
for k, g in df['hostnames'].groupby(df['hostnames'].str[:3])], axis=1)
结果:
# print(hosts)

dbx_host fox_host spl_host trd_host
0 dbx001 fox001 spl001 trd001
1 dbx002 fox002 spl002 trd002
2 dbx003 fox003 spl003 trd003
3 dbx004 fox004 spl004 trd004
4 dbx005 fox005 spl005 trd005
5 dbx006 fox006 spl006 trd006

关于python-3.x - 如何基于数据框 Pandas 的唯一首字母构建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62932315/

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