我有一个熊猫据帧像这样,合并行基于索引
Timestamp Meter1 Meter2
0 234 NaN
1 235 NaN
2 236 NaN
0 NaN 100
1 NaN 101
2 NaN 102
,我有麻烦了基于索引时间戳是这样的合并行,
Timestamp Meter1 Meter2
0 234 100
1 235 101
2 236 102
我有一个熊猫据帧像这样,合并行基于索引
Timestamp Meter1 Meter2
0 234 NaN
1 235 NaN
2 236 NaN
0 NaN 100
1 NaN 101
2 NaN 102
,我有麻烦了基于索引时间戳是这样的合并行,
Timestamp Meter1 Meter2
0 234 100
1 235 101
2 236 102
使用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
使用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
选项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
的Opti 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.first
和groupby.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
我会提到它,但是这是预期的行为。也就是说,它正在选择第一个非空值或有效值。使用last会选择最后一个非空值或有效值。 – piRSquared
事实上,你的答案是唯一没有upvotes意味着你是upvoter。不幸的是,没有人会回报你的青睐... hrrumph –
@cᴏʟᴅsᴘᴇᴇᴅ参见**选项2 **另外,不打扰我( - :我喜欢我的答案! – piRSquared