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

2024-03-28 10:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找最简单的解决方案,从具有重复索引名的CSV文件(下面示例中的s1和s2)创建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

做这个手术最好的方法是什么?你知道吗


Tags: 文件csv数据示例timeunit解决方案temp
2条回答

用途:

#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

考虑数据帧

        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

您可以使用df.reset_indexdrop is False,它可以根据索引级别生成列数,然后您可以在主索引转换后将其分配给主索引

#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)

输出:

    C   D   E
a 4 7.0 1.0 5.0
a 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

相关问题 更多 >