根据索引合并行

时间:2017-09-15 03:57:50

标签: python-2.7 pandas

我有像这样的pandas数据框,

Timestamp Meter1 Meter2
0         234    NaN
1         235    NaN
2         236    NaN
0         NaN    100
1         NaN    101
2         NaN    102

我无法根据索引Timestamp将行合并到类似的内容

Timestamp Meter1 Meter2
0         234    100
1         235    101
2         236    102

3 个答案:

答案 0 :(得分:2)

选项0

df.max(level=0)

           Meter1  Meter2
Timestamp                
0           234.0   100.0
1           235.0   101.0
2           236.0   102.0

选项1

df.sum(level=0)

           Meter1  Meter2
Timestamp                
0           234.0   100.0
1           235.0   101.0
2           236.0   102.0

选项2
令人不安的答案

df.stack().unstack()

           Meter1  Meter2
Timestamp                
0           234.0   100.0
1           235.0   101.0
2           236.0   102.0

由@jezrael提出并与问题here

相关联

但是,正如我所理解的那样groupby.firstgroupby.last是它将返回每列组中的第一个(或最后一个)有效值。换句话说,我相信这是按预期工作的。

选项3

df.groupby(level=0).first()

           Meter1  Meter2
Timestamp                
0           234.0   100.0
1           235.0   101.0
2           236.0   102.0

选项4

df.groupby(level=0).last()

           Meter1  Meter2
Timestamp                
0           234.0   100.0
1           235.0   101.0
2           236.0   102.0

答案 1 :(得分:1)

使用groupby

df.groupby(level=0).max()

OR

df.groupby('Timestamp').max()

输出

           Meter1  Meter2
Timestamp                
0           234.0   100.0
1           235.0   101.0
2           236.0   102.0

答案 2 :(得分:1)

使用groupby并汇总sum

df = df.groupby(level=0).sum()
print (df)
           Meter1  Meter2
Timestamp                
0           234.0   100.0
1           235.0   101.0
2           236.0   102.0

如果只有ints

df = df.groupby(level=0).sum().astype(int)
print (df)
           Meter1  Meter2
Timestamp                
0             234     100
1             235     101
2             236     102

但也许问题是你忘了concat中的axis=1

print (df1)
           Meter1
Timestamp        
0             234
1             235
2             236

print (df2)
           Meter2
Timestamp        
0             100
1             101
2             102

print (pd.concat([df1, df2]))
           Meter1  Meter2
Timestamp                
0           234.0     NaN
1           235.0     NaN
2           236.0     NaN
0             NaN   100.0
1             NaN   101.0
2             NaN   102.0

print (pd.concat([df1, df2], axis=1))
           Meter1  Meter2
Timestamp                
0             234     100
1             235     101
2             236     102