我有两个数据帧,我想按列连接(轴= 1)与内连接.其中一个数据帧有一些重复的索引,但行不是重复的,我不想丢失那些数据:
df1 = pd.DataFrame([{'a':1,'b':2},{'a':1,'b':3},{'a':2,'b':4}],
columns = ['a','b']).set_index('a')
df2 = pd.DataFrame([{'a':1,'c':5},{'a':2,'c':6}],columns = ['a','c']).set_index('a')
>>> df1
b
a
1 2
1 3
2 4
8 9
>>> df2
c
a
1 5
2 6
Run Code Online (Sandbox Code Playgroud)
默认concat行为是使用NaN填充缺失值:
>>> pd.concat([df1,df2])
b c
a
1 2 NaN
1 3 NaN
2 4 NaN
1 NaN 5
2 NaN 6
Run Code Online (Sandbox Code Playgroud)
我想保留df1中的重复索引并用df2中的重复值填充它们,但是在pandas 0.13.1中,列上的内连接会产生错误.在更新版本的pandas concat做我想要的:
>>> pd.concat([df1, df2], axis=1, join='inner')
b c
a
1 2 5
1 3 5
2 4 6
Run Code Online (Sandbox Code Playgroud)
达到我想要的结果的最佳方法是什么?有没有groupby解决方案?或者也许我根本不应该使用concat?
我有制作大量情节的脚本。我直接用plt.savefig()而不是保存它们,plt.show()所以我不必关闭所有窗口。在 spyder 中,如果我使用内联(意味着我必须向后滚动才能看到其他输出),它们都会显示在控制台中,如果我使用自动,它们都会显示在单独的窗口中。我希望他们根本不要出现,因为我plt.show()从来不打电话。我怎样才能做到这一点?
注意:两个建议的答案都有效!谢谢!我选择 plt.ioff() 作为正确答案,因为我可以选择为某些脚本而不是其他脚本执行此操作。
在使用标准python安装/ IDLE几年之后,我正在尝试Anaconda / Spyder。在我运行的每个脚本和交互式命令中,控制台(和变量资源管理器)在每个工作会话期间会逐渐变慢。最终,要花几分钟才能获得对诸如print之类的简单命令的响应,然后它完全停止响应,因此我将其关闭。这对我的工作相当破坏。
Mac OSX 10.13.6
conda version : 4.5.11
conda-build version : 3.15.1
python version : 3.7.0.final.0
qt 5.9.6
spyder 3.3.1
ipython 7.1.1
Run Code Online (Sandbox Code Playgroud)
我确实经常使用matplotlib。只要有可能,我都会在脚本开头使用plt.ioff(),并在结尾处使用plt.close('all')。在首选项中完全关闭matplotlib支持无济于事,而且它也不是永久性的解决方法。Python没有在我所有的CPU或RAM附近使用任何地方。