小编jf3*_*328的帖子

python pandas,DF.groupby().agg(),agg()中的列引用

在一个具体问题上,假设我有一个DataFrame DF

     word  tag count
0    a     S    30
1    the   S    20
2    a     T    60
3    an    T    5
4    the   T    10 
Run Code Online (Sandbox Code Playgroud)

对于每个"单词",我想找到具有最多"计数"的"标签".所以回报就像是

     word  tag count
1    the   S    20
2    a     T    60
3    an    T    5
Run Code Online (Sandbox Code Playgroud)

我不关心计数列,或者订单/索引是原始的还是搞砸了.返回字典{ 'the':'S',...}就好了.

我希望我能做到

DF.groupby(['word']).agg(lambda x: x['tag'][ x['count'].argmax() ] )
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我无法访问列信息.

更抽象地说,agg(函数)中的函数看作什么?

顺便说一下,.agg()与.aggregate()相同吗?

非常感谢.

python group-by pandas split-apply-combine

42
推荐指数
2
解决办法
8万
查看次数

python dask DataFrame,支持(平凡可并行化)行适用?

我最近发现dask模块旨在成为一个易于使用的python并行处理模块.对我来说最大的卖点是它与熊猫一起使用.

在其手册页上阅读了一下之后,我找不到办法完成这个简单的可并行化任务:

ts.apply(func) # for pandas series
df.apply(func, axis = 1) # for pandas DF row apply
Run Code Online (Sandbox Code Playgroud)

目前,要在dask,AFAIK实现这一目标,

ddf.assign(A=lambda df: df.apply(func, axis=1)).compute() # dask DataFrame
Run Code Online (Sandbox Code Playgroud)

这是一种丑陋的语法,实际上比直接慢

df.apply(func, axis = 1) # for pandas DF row apply
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

编辑:感谢@MRocklin的地图功能.它似乎比普通的大熊猫慢.这是与熊猫GIL发布问题有关还是我做错了?

import dask.dataframe as dd
s = pd.Series([10000]*120)
ds = dd.from_pandas(s, npartitions = 3)

def slow_func(k):
    A = np.random.normal(size = k) # k = 10000
    s = 0
    for a in A:
        if a > 0:
            s += 1
        else:
            s …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing pandas dask

36
推荐指数
1
解决办法
1万
查看次数

R ggplot,更改构面标签文本和背景颜色

如何将灰色小平面标签(A和B)更改为带有白色文本的红色背景?

A = data.table(x = 1:4, y = 1:4, z = c('A','A','B','B'))
ggplot(A) + geom_point(aes(x = x, y = y)) + facet_wrap(~z) + theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r ggplot2

30
推荐指数
2
解决办法
2万
查看次数

python pandas timeseries plots,如何在ts.plot()之外设置xlim和xticks?

fig = plt.figure()
ax = fig.gca()
ts.plot(ax=ax)
Run Code Online (Sandbox Code Playgroud)

我知道我可以在pandas绘制例程中设置xlim:ts.plot(xlim = ...),但是在完成pandas绘图后如何更改它?

ax.set_xlim(( t0.toordinal(), t1.toordinal() )
Run Code Online (Sandbox Code Playgroud)

有时工作,但如果大熊猫将xaxis格式化为几个月而不是几天,这将很难实现.

反正知道熊猫如何将日期转换为xaxis然后以同样的方式转换我的xlim?

谢谢.

python matplotlib pandas

19
推荐指数
1
解决办法
3万
查看次数

R ggplot,删除ggsave/ggplot中的白边

如何删除ggsave中的白边?

我的问题与R中的删除空格(即边距)ggplot2完全相同.但是,答案对我来说并不理想.对于固定但未知的宽高比而不是试验和错误,我想给出ggsave一个height并且weight希望我的情节(即标题的顶部到x标签的底部)自动扩展到没有白边的那个配置.

如何删除我的.png周围的奇怪白边(用r,ggplot绘制)?提供了一种方式,使边缘透明的,但它们仍然存在和剧情小于heightwidth我在保存的文件中设置.

r ggplot2

10
推荐指数
3
解决办法
7723
查看次数

如何让Jupyter笔记本在系统变量中使用PYTHONPATH而不直接攻击sys.path?

Jupyter和Python中的问题sys.path不同的问题- 如何在Jupyter中导入自己的模块?.在纯Python中,它将我的系统环境变量PYTHONPATH预先添加到sys.path但Jupyter笔记本没有,所以我无法导入我自己的模块.

在SO上提出了许多类似的问题,解决方案是在脚本中直接操作sys.path.

有没有办法让Jupyter笔记本使用我的系统PYTHONPATH变量,就像纯python一样?

python windows jupyter-notebook

10
推荐指数
2
解决办法
9864
查看次数

plotly dash:创建多个回调(带循环?)

假设我有一个带有 20 个参数的模型,并且我为每个参数制作了一个输入组件。

[dcc.Input(type = 'number', id = 'input %i'%i) for i in range(20)]
Run Code Online (Sandbox Code Playgroud)

我想要一个按钮html.Button('populate parameters', id = 'button populate'),它应该为所有输入填充最佳预装值。

代码应如下所示,但它不起作用。

for i in range(20):
    @app.callback(
        dash.dependencies.Output('input %i'%i, 'value'),
        [dash.dependencies.Input('button populate', 'n_clicks')]
    )
    def update(ignore):
        return np.random.uniform()
Run Code Online (Sandbox Code Playgroud)

我是否必须为每个具有相同功能的输出编写 20 个回调?我找不到一次性制作它们的方法(循环?)

plotly-dash

10
推荐指数
2
解决办法
7120
查看次数

python字符串格式,负号表示负数,但空格表示正数

是否有格式代码将 -2.34 格式化为“-2.3”,但将 +2.34 格式化为“2.3”(注意前导空格)?基本上显示负号,但为正号留出空间。

python

10
推荐指数
2
解决办法
4304
查看次数

Python字符串格式化一个浮点数,如何截断而不是四舍五入

是否有格式选项,以便

>>> '%.1(format)'%2.85
Run Code Online (Sandbox Code Playgroud)

给出'2.8'?

在 Python 2.7 中,'f' 格式四舍五入到最接近的

>>> "{:.0f}".format(2.85)
'3'
>>> "%.0f"%2.85
'3'
>>> "%.1f"%2.85
'2.9'
>>> "%i"%2.85
'2'
Run Code Online (Sandbox Code Playgroud)

python string.format

8
推荐指数
1
解决办法
8535
查看次数

在data.table中按组分割的分位数

我想为每个组进行分位数切割(切成n个具有相同点数的区间)

qcut = function(x, n) {
  quantiles = seq(0, 1, length.out = n+1)
  cutpoints = unname(quantile(x, quantiles, na.rm = TRUE))
  cut(x, cutpoints, include.lowest = TRUE)
}

library(data.table)
dt = data.table(A = 1:10, B = c(1,1,1,1,1,2,2,2,2,2))
dt[, bin := qcut(A, 3)]
dt[, bin2 := qcut(A, 3), by = B]

dt
A     B    bin        bin2
 1:  1 1  [1,4]    [6,7.33]
 2:  2 1  [1,4]    [6,7.33]
 3:  3 1  [1,4] (7.33,8.67]
 4:  4 1  [1,4]   (8.67,10]
 5:  5 1  (4,7]   (8.67,10]
 6:  6 …
Run Code Online (Sandbox Code Playgroud)

r quantile data.table

8
推荐指数
1
解决办法
2263
查看次数