修复数据框中的重复索引名称

时间:2018-09-10 05:20:08

标签: python pandas csv dataframe

我正在寻找从具有重复索引名称(在下面的示例中为s1和s2)的CSV文件创建Python数据框的最简单解决方案。

以下是CSV文件的外观:

       var1   var2    var3
unit x    8      4      12
temp y   -1     -4      -3
time     
s1        9     12      11
s2       12     15       7
month    
s1        1      3      12 
s2        2      4       6

Python数据框应如下所示:

        var1   var2    var3
unit x     8      4      12
temp y    -1     -4      -3
time s1    9     12      11
time s2   12     15       7
month s1   1      3      12
month s2   2      4       6

执行此操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

使用:

#convert index to Series
s = df.index.to_series()
#identify duplicated values
m = s.duplicated(keep=False)
#replace dupes by NaNs and then by forward filling
df.index = np.where(m, s.mask(m).ffill() + ' ' + s.index, s)
#remove only NaNs rows
df = df.dropna(how='all')
print (df)
          var1  var2  var3
unit x     8.0   4.0  12.0
temp y    -1.0  -4.0  -3.0
time s1    9.0  12.0  11.0
time s2   12.0  15.0   7.0
month s1   1.0   3.0  12.0
month s2   2.0   4.0   6.0

答案 1 :(得分:0)

考虑的数据框

int max_of_four(int a, int b, int c, int d)
{
   int max1 = a > b ? a : b;
   int max2 = c > d ? c : d;

   return (max1 > max2 ? max1 : max2);
}

您可以使用 C D E A B a 4 7.0 1.0 5.0 5 3.0 4.0 5.5 b 5 8.0 3.0 3.0 c 4 9.0 5.0 6.0 f 4 3.0 0.0 4.0 删除为False,它可以根据索引级别确定列数,然后在转换后可以将其分配给主索引

df.reset_index

出局:

#converting index to columns
df = df1.reset_index()
# Assigning multilevel index columns to main index
df.index = df[df.columns[0]].astype(str)+' '+df[df.columns[1]].astype(str)
# dropping the indexed columns
df = df.drop(df.columns[[0,1]],axis=1)