假设我对整数有以下观察结果:
df = pd.DataFrame({'observed_scores': [100, 100, 90, 85, 100, ...]})
Run Code Online (Sandbox Code Playgroud)
我知道这可以用作制作密度图的输入:
df['observed_scores'].plot.density()
Run Code Online (Sandbox Code Playgroud)
但假设我拥有的是一个计数表:
df = pd.DataFrame({'observed_scores': [100, 95, 90, 85, ...], 'counts': [1534, 1399, 3421, 8764, ...})
Run Code Online (Sandbox Code Playgroud)
这比完整observed_scores系列更便宜(我有很多观察)。
我知道可以使用计数绘制直方图,但如何绘制密度图?如果可能,是否可以在不必将计数表拆开/拆开成数千行的情况下完成?
我正在为不同的数据集制作对数图,并且需要包含最佳拟合线方程。我知道应该在图中的哪个位置放置方程,但是由于数据集具有非常不同的值,我想在注释中使用相对坐标。(否则,注释将针对每个数据集移动。)
我知道 matplotlib 的 annotate() 函数,我知道我可以使用 textcoords='axes fraction' 来启用相对坐标。当我按常规比例绘制数据时,它会起作用。但随后我将至少一个比例更改为记录,并且注释消失了。我没有收到错误消息。
这是我的代码:
plt.clf()
samplevalues = [100,1000,5000,10^4]
ax = plt.subplot(111)
ax.plot(samplevalues,samplevalues,'o',color='black')
ax.annotate('hi',(0.5,0.5), textcoords='axes fraction')
ax.set_xscale('log')
ax.set_yscale('log')
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果我注释掉ax.set_xcale('log')and ax.set_ycale('log'),注释就会出现在图的中间(它应该在的地方)。否则,它不会出现。
在此先感谢您的帮助!
我有两个数据帧,A和B,我希望得到A中但不是B中的数据帧,就像左下角的那个.
Dataframe A有列['a','b' + others],B有列['a','b' + others].没有NaN值.我尝试了以下方法:
1.
dfm = dfA.merge(dfB, on=['a','b'])
dfe = dfA[(~dfA['a'].isin(dfm['a']) | (~dfA['b'].isin(dfm['b'])
Run Code Online (Sandbox Code Playgroud)
2.
dfm = dfA.merge(dfB, on=['a','b'])
dfe = dfA[(~dfA['a'].isin(dfm['a']) & (~dfA['b'].isin(dfm['b'])
Run Code Online (Sandbox Code Playgroud)
3.
dfe = dfA[(~dfA['a'].isin(dfB['a']) | (~dfA['b'].isin(dfB['b'])
Run Code Online (Sandbox Code Playgroud)
4.
dfe = dfA[(~dfA['a'].isin(dfB['a']) & (~dfA['b'].isin(dfB['b'])
Run Code Online (Sandbox Code Playgroud)
但是当我len(dfm)和len(dfe)他们不总结到dfA(它由几个数字是关闭).我试过在虚拟案例和#1工作中这样做,所以也许我的数据集可能有一些我无法重现的特性.
这样做的正确方法是什么?
我需要获得β分布的第N个分位数,或者相当于95%或99%的百分位数.这在Maple中更容易,它允许符号输入 - 但是如何在Python中完成?
我搜索了stackoverflow,似乎人们常常只关注正态分布.
谢谢!
我有这个数据帧:
user1 user2 quantity
--------------------------
Alice Carol 10
Alice Bob 5
Bob Dan 2
Carol Eve 7
Carol Dan 100
Run Code Online (Sandbox Code Playgroud)
我想按用户1的数量降序对每一行按降序排列.例如:
user1 user2 quantity order
----------------------------------
Alice Carol 10 1
Alice Bob 5 2
Bob Dan 2 1
Carol Eve 7 2
Carol Dan 100 1
Run Code Online (Sandbox Code Playgroud)
目前,我的代码是这样的:
users = df['user1'].unique()
for user in users:
cond = (df['user1'] == user)
sort_ser = df[cond]['quantity'].values.argsort()[::-1] # descending
df.loc[cond, 'order'] = sort_ser + 1
Run Code Online (Sandbox Code Playgroud)
它适用于小型数据帧.但如果它适用于大型的那么它会很慢.我认为这是因为(1)我基本上按用户运行它,(2)正在发生几种情况.有更快的方法吗?
这是一个示例数据框:
label data
a 1.09
b 2.1
a 5.0
b 2.0
c 1.9
Run Code Online (Sandbox Code Playgroud)
我想要的是
arr = [[1.09, 5.0], [2.1, 2.0],[1.9]]
Run Code Online (Sandbox Code Playgroud)
最好是一个 numpy 数组列表。
我知道这df.groupby.groups.keys()给了我列表['a','b','c'],并df.groupby.groups.values()给了我类似的东西arr,但作为一个Int64Index对象。但是,我试过了df.loc[df.groupby.groups.values()]['label'],并没有得到想要的结果。
我该如何实现?谢谢!
我想打开一个可能已压缩或未压缩的文件。要打开文件,我使用
with open(myfile, 'r') as f:
some_func(f) # arbitrary function
Run Code Online (Sandbox Code Playgroud)
或者
import gzip
with gzip.open(myfile, 'r') as f:
some_func(f)
Run Code Online (Sandbox Code Playgroud)
我想检查是否myfile有gz扩展名,然后从那里决定with使用哪个语句。这是我所拥有的:
# myfile_gzipped is a Boolean variable that tells me whether it's gzipped or not
if myfile_gzipped:
with gzip.open(myfile, 'rb') as f:
some_func(f)
else:
with open(myfile, 'r') as f:
some_func(f)
Run Code Online (Sandbox Code Playgroud)
我应该如何处理而不需要重复some_func(f)?
stackoverflow 上有一个线程有完全相同的问题,但它是针对 Matlab 的。但是,我正在使用 matplotlib,但我不知道如何继续。基本上,我有很多箱线图,但我想像这样将它们分开(从上面的线程中无耻地复制):
我该怎么办?有人建议在两组之间放置一个不可见的箱线图,但我不知道如何使刻度(不仅仅是标签)仅针对该值消失。
标题不太清楚,但这里有一个例子。假设我有:
person apple orange type
Alice 11 23 apple
Bob 14 20 orange
Run Code Online (Sandbox Code Playgroud)
我想得到这个专栏
person new_col
Alice 11
Bob 20
Run Code Online (Sandbox Code Playgroud)
所以我们得到“爱丽丝”行的“苹果”列和“鲍勃”行的“橙色”列。
我在想 iterrows,但这会很慢。有没有更快的方法来做到这一点?
python ×9
pandas ×5
matplotlib ×2
scipy ×2
annotate ×1
dataframe ×1
indexing ×1
numpy ×1
percentile ×1
quantile ×1
scikit-learn ×1
sorting ×1