我有一个带有可分为不同组的列的DataFrame。我需要返回一个df,其中条目是原始值减去组均值。
我通过使用groupby进行了以下操作,它给了我分组的意思。
base = datetime.today().date()
date_list = [base - timedelta(days=x) for x in range(0, 10)]
df = pd.DataFrame(data=np.random.randint(1, 100, (10, 8)), index=date_list, columns=['a1', 'a2', 'b1', 'a3', 'b2', 'c1' , 'c2', 'b3'])
xx = df.loc[[datetime(2016, 5, 18).date()]]
xx.index = ['group']
xx.a1 = 1
xx.a2 = 1
xx.a3 = 1
xx.b3 = 2
xx.b2 = 2
xx.b1 = 2
xx.c1 = 3
xx.c2 = 3
df = df.append(xx)
dft = df.T
dft.groupby(['group']).mean().T
Run Code Online (Sandbox Code Playgroud)
更新20/05/16:
在unutbu的回答的帮助下,我也提出了以下解决方案:
df.T.groupby(group, axis=0).apply(lambda x: x - np.mean(x)).T
Run Code Online (Sandbox Code Playgroud) 什么是在python中存储和分析高维日期的最佳方法?我喜欢Pandas DataFrame和Panel,我可以轻松操控轴.现在我有一个超立方体(dim> = 4)的数据.我一直在想像Panels的dict,作为面板条目的元组.我想知道Python中是否存在高度暗淡的面板.
更新20/05/16:非常感谢所有答案.我已经尝试过MultiIndex和xArray,但是我无法评论它们中的任何一个.在我的问题中,我将尝试使用ndarray,因为我发现标签不是必需的,我可以单独保存.
更新16/09/16:我最终使用MultiIndex.一开始操纵它的方法相当棘手,但我现在已经习惯了.
我有DataFrame,我试图将每列中的所有值分配为该列的总和.
x = pd.DataFrame(data = [[1,2],[3,4],[5,6],[7,8],[9,10]],index=[1,2,3,4,5],columns=['a','b'])
x
a b
1 1 2
2 3 4
3 5 6
4 7 8
5 9 10
Run Code Online (Sandbox Code Playgroud)
输出应该是
a b
1 25 30
2 25 30
3 25 30
4 25 30
5 25 30
Run Code Online (Sandbox Code Playgroud)
我想使用x.apply(f,axis = 0),但我不知道如何定义一个将列转换为lambda函数中所有列值之和的函数.以下行引发SyntaxError:无法分配给lambda
f = lambda x : x[:]= x.sum()
Run Code Online (Sandbox Code Playgroud) 我正在运行一个程序,该程序首先将20 GB数据加载到内存中。然后,我将执行N(> 1000)个独立的任务,其中每个任务都可能使用(只读)20 GB数据的一部分。我现在正在尝试通过多处理来完成那些任务。但是,正如这个答案所说,每个过程都复制了整个全局变量。就我而言,我的内存不足以执行4个以上的任务,因为我的内存仅为96 GB。我想知道是否有解决此类问题的方法,以便我可以充分利用我的所有内核而不会占用太多内存。
如何将一个函数z_ij = f(x_ij, y_ij)从数据框X和Y同样大小的,并保存结果数据帧Z?
如果我们这样做
>>> x = range(10)
Run Code Online (Sandbox Code Playgroud)
然后
>>> x[2:6]
[2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法可以做点什么
b=2:6
Run Code Online (Sandbox Code Playgroud)
以便
x[b]
Run Code Online (Sandbox Code Playgroud)
版画
[2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud) 例如,我们可以通过提供其合约地址0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48来返回“USDC”吗?
我想出了这样的数据框,我想知道如何更改或删除'id'和'date',因为它们只是索引和列的名称.
id col1 col2 clo3
date
2000-01-03 55.500000 NaN NaN
2000-01-04 52.812500 NaN NaN
2000-01-05 52.750000 NaN NaN
2000-01-06 53.500000 NaN NaN
2000-01-07 53.625000 NaN NaN
2000-01-10 52.656250 NaN NaN
Run Code Online (Sandbox Code Playgroud) 我最近了解到在 Oracle 中我们可以做类似的事情
select t1.a, t2.b
from table1 t1, table2 t2
where t1.x = t2.x
Run Code Online (Sandbox Code Playgroud)
这相当于
select t1.a, t2.b
from table1 t1
join table2 t2 on (t1.x=t2.x)
Run Code Online (Sandbox Code Playgroud)
是否有任何性能差异或是否有任何其他论据表明我们应该使用一种样式而不是另一种样式?