J. *_*Day 5 python merge join dataframe pandas
我正在尝试组合两组数据,但是我无法确定哪种方法最合适(连接,合并,连接等)这个应用程序,并且文档没有任何示例可以做我需要的去做.
我有两组数据,结构如下:
>>> A
Time Voltage
1.0 5.1
2.0 5.5
3.0 5.3
4.0 5.4
5.0 5.0
>>> B
Time Current
-1.0 0.5
0.0 0.6
1.0 0.3
2.0 0.4
3.0 0.7
Run Code Online (Sandbox Code Playgroud)
我想组合数据列并将"时间"列合并在一起,以便获得以下内容:
>>> AB
Time Voltage Current
-1.0 0.5
0.0 0.6
1.0 5.1 0.3
2.0 5.5 0.4
3.0 5.3 0.7
4.0 5.4
5.0 5.0
Run Code Online (Sandbox Code Playgroud)
我已经尝试过AB = merge_ordered(A, B, on='Time', how='outer'),虽然它成功地组合了数据,但它输出类似于:
>>> AB
Time Voltage Current
-1.0 0.5
0.0 0.6
1.0 5.1
1.0 0.3
2.0 5.5
2.0 0.4
3.0 5.3
3.0 0.7
4.0 5.4
5.0 5.0
Run Code Online (Sandbox Code Playgroud)
您会注意到它没有将行与共享的"时间"值组合在一起.
我也试过合并一个la AB = A.merge(B, on='Time', how='outer'),但是输出的东西组合在一起,但没有排序,就像这样:
>>> AB
Time Voltage Current
-1.0 0.5
0.0 0.6
1.0 5.1
2.0 5.5
3.0 5.3 0.7
4.0 5.4
5.0 5.0
1.0 0.3
2.0 0.4
Run Code Online (Sandbox Code Playgroud)
...它基本上会跳过"当前"中的一些数据并将其附加到底部,但它的确不一致.而且,它不会将行合并在一起.
我也尝试过AB = pandas.concat(A, B, axis=1),但结果没有合并.我只是得到了两个DataFrame的串联,如下所示:
>>> AB
Time Voltage Time Current
1.0 5.1 -1.0 0.5
2.0 5.5 0.0 0.6
3.0 5.3 1.0 0.3
4.0 5.4 2.0 0.4
5.0 5.0 3.0 0.7
Run Code Online (Sandbox Code Playgroud)
我一直在搜索文档,并在这里尝试找出merge和之间的确切差异join,但从我收集到的它们非常相似.尽管如此,我还没有找到任何具体回答"如何合并共享相同键/索引的行"的问题.任何人都可以告诉我如何做到这一点?我只有几天的熊猫经验!
merge
merge在列上结合.默认情况下,它采用所有通常命名的列.否则,您可以指定要组合的列.在这个例子中,我选择了,Time.
A.merge(B, 'outer', 'Time')
Time Voltage Current
0 1.0 5.1 0.3
1 2.0 5.5 0.4
2 3.0 5.3 0.7
3 4.0 5.4 NaN
4 5.0 5.0 NaN
5 -1.0 NaN 0.5
6 0.0 NaN 0.6
Run Code Online (Sandbox Code Playgroud)
join
join除非您指定左侧的列,否则将对索引值进行组合.这就是为什么我设置右侧的索引和指定左侧的列Time.
A.join(B.set_index('Time'), 'Time', 'outer')
Time Voltage Current
0 1.0 5.1 0.3
1 2.0 5.5 0.4
2 3.0 5.3 0.7
3 4.0 5.4 NaN
4 5.0 5.0 NaN
4 -1.0 NaN 0.5
4 0.0 NaN 0.6 ?
Run Code Online (Sandbox Code Playgroud)
pd.concat
concat结合索引值...所以我创建了一个列表推导,我在其中迭代我想要组合的每个数据帧[A, B].在理解中,每个数据帧都假定名称d,因此for d in [A, B]. axis=1说将它们并排组合使用索引作为连接特征.
pd.concat([d.set_index('Time') for d in [A, B]], axis=1).reset_index()
Time Voltage Current
0 -1.0 NaN 0.5
1 0.0 NaN 0.6
2 1.0 5.1 0.3
3 2.0 5.5 0.4
4 3.0 5.3 0.7
5 4.0 5.4 NaN
6 5.0 5.0 NaN
Run Code Online (Sandbox Code Playgroud)
combine_first
A.set_index('Time').combine_first(B.set_index('Time')).reset_index()
Time Current Voltage
0 -1.0 0.5 NaN
1 0.0 0.6 NaN
2 1.0 0.3 5.1
3 2.0 0.4 5.5
4 3.0 0.7 5.3
5 4.0 NaN 5.4
6 5.0 NaN 5.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3743 次 |
| 最近记录: |