通过成对的多索引熊猫进行迭代

时间:2017-10-11 15:12:11

标签: python pandas

我有一个数据框,其中包含一个代表docker容器之间通信的多索引。

Out[37]: 

sum  count
fd.cip        fd.sip        evt.host      container.name                             container.image            evt.io_dir              
10.144.119.13 10.144.119.19 10.144.119.13 mesos-c6387aca-8770-40b5-b7b6-ba97de6aefa3 mesosphere/marathon:v1.5.0 write          12      1
9.0.0.131     9.0.0.130     10.144.119.15 mesos-4988aac9-94ec-44b4-8e32-ee3de23247ce ches/kafka                 write          12      1
                                      mesos-5e446cc7-9f07-415b-925d-1a2dab53723c zookeeper                  write          20      1
          9.0.4.130     10.144.119.15 mesos-4988aac9-94ec-44b4-8e32-ee3de23247ce ches/kafka                 write        2142      6
                        10.144.119.17 mesos-39b9f6b8-76e2-4ae2-876e-b9e32bf567a4 ches/kafka                 write        2076    120
          9.0.5.130     10.144.119.14 mesos-7655b397-2a84-4da3-bd67-c805900a9fba ches/kafka                 write         692     40
                        10.144.119.15 mesos-4988aac9-94ec-44b4-8e32-ee3de23247ce ches/kafka                 write         714      2
9.0.0.132     9.0.0.131     10.144.119.15 mesos-4988aac9-94ec-44b4-8e32-ee3de23247ce ches/kafka                 write         549      5
                                      mesos-60f730cf-617d-4b78-b900-2e44f9c36cc6 alvarobrandon/fmone-agent  write       12948      5
          9.0.4.130     10.144.119.15 mesos-60f730cf-617d-4b78-b900-2e44f9c36cc6 alvarobrandon/fmone-agent  write        9757      6
                        10.144.119.17 mesos-39b9f6b8-76e2-4ae2-876e-b9e32bf567a4 ches/kafka                 write         540      6
          9.0.5.130     10.144.119.14 mesos-7655b397-2a84-4da3-bd67-c805900a9fba ches/kafka                 write         540      6
                        10.144.119.15 mesos-60f730cf-617d-4b78-b900-2e44f9c36cc6 alvarobrandon/fmone-agent  write        9554      6
9.0.0.133     9.0.0.131     10.144.119.15 mesos-338da821-3d90-4a8e-8a37-e9dc0a6f3c8f alvarobrandon/fmone-agent  write       13157      4
                                      mesos-4988aac9-94ec-44b4-8e32-ee3de23247ce ches/kafka                 write         426      4
          9.0.4.130     10.144.119.15 mesos-338da821-3d90-4a8e-8a37-e9dc0a6f3c8f alvarobrandon/fmone-agent  write        9768      4
                        10.144.119.17 mesos-39b9f6b8-76e2-4ae2-876e-b9e32bf567a4 ches/kafka                 write         360      4
          9.0.5.130     10.144.119.14 mesos-7655b397-2a84-4da3-bd67-c805900a9fba ches/kafka                 write         417      5
                        10.144.119.15 mesos-338da821-3d90-4a8e-8a37-e9dc0a6f3c8f alvarobrandon/fmone-agent  write       12078      5
9.0.0.134     9.0.4.130     10.144.119.15 mesos-f10839c4-a9cf-4f08-9f27-a6a37f6ff38e alvarobrandon/fmone-agent  write        2674     30
                        10.144.119.17 mesos-39b9f6b8-76e2-4ae2-876e-b9e32bf567a4 ches/kafka                 write        1574    117

fd.cip和fd.sip分别是客户端和服务器ip,它们的组合在整个数据帧中是唯一的,因为两个容器之间只有一个通信通道。我想遍历数据帧,获取每个这些唯一对的container.name。目标是得到像

这样的东西
for each pair(fd.cip,fd.sip):
   print  fd.cip, fd.sip, container.name1, container.name2

从示例

中的数据中提供类似的内容
10.144.119.13, 10.144.119.19, mesos-c6387aca-8770-40b5-b7b6-ba97de6aefa3
9.0.0.131, 9.0.0.130, mesos-4988aac9-94ec-44b4-8e32-ee3de23247ce,  mesos-5e446cc7-9f07-415b-925d-1a2dab53723c
9.0.0.131, 9.0.4.130, mesos-4988aac9-94ec-44b4-8e32-ee3de23247ce, mesos-39b9f6b8-76e2-4ae2-876e-b9e32bf567a4

这有什么解决方案吗?我希望我能很好地解释自己。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。多索引数据帧的groupby函数是我正在寻找的函数。

for idx, df_select in indexdf.groupby(level=[0,1]):
     print idx, df_select.reset_index()

这给了我idx变量中的ip对和df_select数据帧中的其余数据