gpt4 book ai didi

python - Pandas dataframe join/consolidate into single column as string concatenation, 做起来便宜

转载 作者:行者123 更新时间:2023-11-28 22:10:33 26 4
gpt4 key购买 nike

我有一个从 csv 导入的 pandas 数据框,格式如下:

IP 操作系统端口协议(protocol) ...
0.0.0.0 Linux 5000 TCP ...
0.0.0.0 Linux 5001 TCP ...
0.0.0.0 Linux 5002 UDP ...
0.0.0.1 Windows 4008 TCP ...
0.0.0.1 Windows 4009 UDP ...
……………………

我需要合并此数据框以使 IP 是唯一的,如下所示:

IP 操作系统端口 ...
0.0.0.0 Linux 5000(TCP), 5001(TCP), 5002(UDP) ...
0.0.0.1 Windows 4008(tcp), 4009(udp) ...
………………

在生成的数据框中,只有这三列很重要,我不关心其余的。请注意 port 中的字符串连接。此外,就地处理是一种选择,但不是必需的,因为我将进一步处理数据。虽然原始表很长。

我找到的所有内容都只合并到几列中,而不是合并到一个单独的列中。因为我希望操作既便宜又快速(长 table ),所以我想知道是否缺少一种机载方法。我的想法来自于阅读文档,因为我对 Pandas 不太熟悉,所以都不太适合任务:

  • dataframe.join():连接成彼此相邻的单独列,但我需要单个列。
  • dataframe.merge():不会使 key 唯一。
  • 遍历该字段并执行字符串连接,如 if element is in dataframe [...] 以复制端口直到第一次出现 IP ,然后执行 dataframe.drop_duplicates(['IP'], keep=first, inplace=true) 删除键的每个副本,除了现在合并的第一个。不过这看起来真的很贵。
  • This answer不会完成这项工作,因为它将字符串连接到单个列中的字段,但不提供将大括号连接到字符串或以任何方式格式化它的选项。我明确地不是在寻找一个字段作为输出,而是在寻找一个可以如上所示格式化的干净字符串。

是否有我不知道的方法或以 pythonic 方式执行此操作的最佳实践?

最佳答案

首先使用 () 将列连接在一起,然后使用 DataFrame.groupby使用加入:

df['port'] = df['port'] .astype(str) + '(' + df['protocol'] + ')'

#if possible duplicates
#df = df.drop_duplicates(['P','OS','port'])
df = df.groupby(['IP','OS'])['port'].apply(', '.join).reset_index()
print (df)
IP OS port
0 0.0.0.0 Linux 5000(tcp), 5001(tcp), 5002(udp)
1 0.0.0.1 Windows 4008(tcp), 4009(udp)

如果性能很重要,替代解决方案:

df = df.groupby(['IP','OS'])['port'].agg(', '.join).reset_index()

关于python - Pandas dataframe join/consolidate into single column as string concatenation, 做起来便宜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56575675/

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