我试图在matplotlib中绘制一些HDF数据.使用h5py导入它们后,数据以数组的形式存储,如下所示:
array([[151, 176, 178],
[121, 137, 130],
[120, 125, 126])
Run Code Online (Sandbox Code Playgroud)
在这种情况下,x和y值只是数组字段的索引,而z值是特定字段的值.在(x,y,z)形式中,它看起来像:
(1,1,151)
(2,1,176)
(3,1,178)
(1,2,121)
...
Run Code Online (Sandbox Code Playgroud)
等等.
有没有一种简单的方法从这种数据做表面图?我知道我可以通过迭代整个数组将其改为(x,y,z)元组,但也许不需要它?
我正在尝试将包含字符串的表作为结果.
import pandas as pd
df1 = pd.DataFrame({'index' : range(8),
'variable1' : ["A","A","B","B","A","B","B","A"],
'variable2' : ["a","b","a","b","a","b","a","b"],
'variable3' : ["x","x","x","y","y","y","x","y"],
'result': ["on","off","off","on","on","off","off","on"]})
df1.pivot_table(values='result',rows='index',cols=['variable1','variable2','variable3'])
Run Code Online (Sandbox Code Playgroud)
但我明白了:DataError: No numeric types to aggregate.
当我将结果值更改为数字时,这可以正常工作:
df2 = pd.DataFrame({'index' : range(8),
'variable1' : ["A","A","B","B","A","B","B","A"],
'variable2' : ["a","b","a","b","a","b","a","b"],
'variable3' : ["x","x","x","y","y","y","x","y"],
'result': [1,0,0,1,1,0,0,1]})
df2.pivot_table(values='result',rows='index',cols=['variable1','variable2','variable3'])
Run Code Online (Sandbox Code Playgroud)
我得到了我需要的东西:
variable1 A B
variable2 a b a b
variable3 x y x y x y
index
0 1 NaN NaN NaN NaN NaN
1 NaN NaN 0 NaN NaN NaN
2 …Run Code Online (Sandbox Code Playgroud) 我对R很陌生,我主要将其用于使用ggplot2库可视化统计信息。现在我在数据准备方面遇到了问题。
我需要编写一个函数,该函数将从指定的列中具有最高和最低值的数据框中删除一些(2、5或10)行,并将其放入另一个数据框中,并针对两个因素的每种组合进行此操作(就我而言:每天和每台服务器)。
到目前为止,我已经完成了以下步骤(使用esoph示例数据集的MWE )。
我已经根据所需的参数对框架进行了排序(ncontrols例如):
esoph<-esoph[with(esoph,order(-ncontrols)) ,]
Run Code Online (Sandbox Code Playgroud)
我可以显示每个因子值的第一条记录/最后一条记录(在本示例中为每个年龄段):
by(data=esoph,INDICES=esoph$agegp,FUN=head,3)
by(data=esoph,INDICES=esoph$agegp,FUN=tail,3)
Run Code Online (Sandbox Code Playgroud)
因此,基本上,我可以看到最高和最低值,但是我不知道如何将它们提取到另一个数据框中以及如何从主数据框中删除它们。
同样在上面的示例中,我可以看到一个因子(年龄范围)的每个值的顶部/底部记录,但实际上,我需要知道两个因子的每个值的最高和最低记录-在此示例中,它们可能是agegp和alcgp。
我什至不确定上述步骤是否可以-也许使用plyr会更好?我将不胜感激。
我正在慢慢地从R转移到python + pandas,我正面临一个我无法解决的问题......
我需要将一个列的值离散化,方法是将它们分配给bin并将这些bin名称的列添加到原始列中DataFrame.我正在尝试使用pandas.qcut,但最终的Categorical对象似乎不能很好地使用DataFrame.
一个例子:
import pandas as pd
df1 = pd.DataFrame(np.random.randn(10), columns=['a'])
df1['binned_a'] = pd.qcut(df1['a'],4)
Run Code Online (Sandbox Code Playgroud)
现在,当尝试调用时describe,df1我看不到新列:
>>> df1.describe()
a
count 10.000000
mean 0.594072
std 1.109981
min -0.807307
25% -0.304550
50% 0.545839
75% 1.189487
max 2.851922
Run Code Online (Sandbox Code Playgroud)
但是,它显然是存在的:
>>> df1
a binned_a
0 0.190015 (-0.305, 0.546]
1 0.140227 (-0.305, 0.546]
2 1.380000 (1.189, 2.852]
3 -0.522530 [-0.807, -0.305]
4 -0.452810 [-0.807, -0.305]
5 2.851922 (1.189, …Run Code Online (Sandbox Code Playgroud) 我正在努力完成这样的任务:我需要从数据框中离散化列中的值,并根据其他列中的值进行容器定义。
对于一个最小的工作示例,让我们定义一个简单的数据框:
import pandas as pd
df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 3,'B' : np.random.randn(12)})
Run Code Online (Sandbox Code Playgroud)
数据框如下所示:
A B
0 one 2.5772143847077427
1 one -0.6394141654096013
2 two 0.964652049995486
3 three -0.3922889559403503
4 one 1.6903991754896424
5 one 0.5741442025742018
6 two 0.6300564981683544
7 three 0.9403680915507433
8 one 0.7044433078166983
9 one -0.1695006646595688
10 two 0.06376190217285167
11 three 0.277540580579127
Run Code Online (Sandbox Code Playgroud)
现在我想介绍column C,它将包含一个bin标签,column中的每个值都有不同的bin A,即:
(-10,-1,0,1,10)为了A == 'one',(-100,0,100)为了A == 'two',(-999,0,1,2,3)为了A == 'three'。 …我想展示两个值如何在 x 轴和 y 轴上相互重叠。就我而言,这些是时间序列形式的一些观察数据,但我认为这是不相关的。
我想实现这样的目标: http://druid.if.uj.edu.pl/~pawel/rect3001.png 在 matplotlib 中可能吗?