【问题标题】:Iterating over Index in Python在 Python 中迭代索引
【发布时间】:2016-12-01 05:29:15
【问题描述】:

我正在尝试编写一个 for 循环来遍历我的索引,并且只保留那些有重复的。

我当前的数据框是两个合并在一起的

                  0.0102700     0.0308099     0.0616199      0.123240  \   
5000000000010  4.330760e-05  4.442720e-05  9.232970e-05  1.994190e-04   
5000000000238  6.006910e-04  6.041130e-04  1.220220e-03  2.500240e-03
...

.

              0.00902317     0.0270695     0.0451159     0.0631622  \ 
5000000000010  6.962980e-05  7.063750e-05  7.165970e-05  7.269680e-05   
5000000000234  4.638970e-04  4.716010e-04  4.794320e-04  4.873930e-04 

.

 New = pd.concat([SFR_low, SFR_high])
 New = New.sort_index()
 print(New)

                 0.00902317     0.0102700     0.0270695     0.0308099  \
5000000000010  6.962980e-05           NaN  7.063750e-05           NaN   
5000000000010           NaN  4.330760e-05           NaN  4.442720e-05   
5000000000081  6.299210e-05           NaN  6.299320e-05           NaN   
5000000000082           NaN  8.176550e-04           NaN  8.172630e-04

我需要一个只保留具有重复索引的行的新数据框。

【问题讨论】:

  • 请编辑问题并添加您的代码和 DataFrame(或其中的一部分)
  • 现在才这样做,但我还没有任何代码,因为这些文件刚刚被读入。
  • 您要保留值、行还是列?并在哪里复制?在同一行、同一列或整个表中?请尝试一些东西,如果你失败了,那就重做这个问题。这可能会帮助您找到消除重复项所需的代码chrisalbon.com/python/pandas_dataframe_count_values.html 有一些代码可以检查 DataFrames 上的频率。祝你好运。

标签: python loops pandas indexing iteration


【解决方案1】:

Index.duplicated与参数keep=False一起使用:

print (df.index[df.index.duplicated(keep=False)])
Int64Index([1000, 1000, 1002, 1002], dtype='int64')


for i in df.index[df.index.duplicated(keep=False)]:
    print (i)
1000
1000
1002
1002

如果需要过滤具有重复索引的行,请使用boolean indexing

print (New.index.duplicated(keep=False))
[ True  True False False]

print (New[New.index.duplicated(keep=False)])
               0.00902317  0.0102700  0.0270695  0.0308099  0.0451159  \
5000000000010         NaN   0.000043        NaN   0.000044        NaN   
5000000000010     0.00007        NaN   0.000071        NaN   0.000072   

               0.0616199  0.0631622  0.123240  
5000000000010   0.000092        NaN  0.000199  
5000000000010        NaN   0.000073       NaN 

【讨论】:

    【解决方案2】:
    li = [1000,1000,1001,1002,1002]
    for i in li:
        temp = i
        count = 0
        for j in li:
            if j is temp:
                count +=1
        if count > 1:
            print i
    

    这解决了你的要求?

    【讨论】:

    • OP 使用的是pandas 而不是列表,此答案与 OP 的问题无关
    【解决方案3】:

    在询问之前先尝试一些代码: 有很多重复的问题

    a = [1000,1000,1001,1002,1002]
    c = [x for x in a if a.count(x) > 1]
    print c
    

    【讨论】:

      猜你喜欢
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2013-07-21
      • 2019-06-16
      • 1970-01-01
      • 2019-12-12
      相关资源
      最近更新 更多