我可以在pandas中的特定列索引处插入列吗?
import pandas as pd
df = pd.DataFrame({'l':['a','b','c','d'], 'v':[1,2,1,2]})
df['n'] = 0
Run Code Online (Sandbox Code Playgroud)
这将把列n作为最后一列df,但是有没有办法告诉df我们n在开头?
是否有一种pythonic方法将字典值分配给其键,以便将字典条目转换为变量?我试过这个:
>>> d = {'a':1, 'b':2}
>>> for key,val in d.items():
exec('exec(key)=val')
exec(key)=val
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
更新:也许我应该更具体:我确实知道键值对是正确的,因为它们之前被我定义为变量.然后我将这些变量存储在字典中(作为键值对),并希望在不同的函数中重用它们.我可以在新函数中重新定义它们,但因为我可能有一个包含大约20个条目的字典,我认为可能有一种更有效的方法.
df = pd.DataFrame({'a':['x','x','x','x','x','y','y','y','y','y'],'b':['z','z','z','w','w','z','z','w','w','w'],'c':['c1','c2','c3','c1','c3','c1','c3','c1','c2','c3'],'d':range(1,11)})
a b c d
0 x z c1 1
1 x z c2 2
2 x z c3 3
3 x w c1 4
4 x w c3 5
5 y z c1 6
6 y z c3 7
7 y w c1 8
8 y w c2 9
9 y w c3 10
Run Code Online (Sandbox Code Playgroud)
我怎么能只保留行,对于所有的组合a和b,包含相同的值c?或者换句话说,如何与排除行c了仅在一些组合的现值a和b?
例如,只有c1andc3出现在aand b( [x,z] …
是否可以修改numpy.random.choice函数以使其返回所选元素的索引?基本上,我想创建一个列表并随机选择元素而无需替换
import numpy as np
>>> a = [1,4,1,3,3,2,1,4]
>>> np.random.choice(a)
>>> 4
>>> a
>>> [1,4,1,3,3,2,1,4]
Run Code Online (Sandbox Code Playgroud)
a.remove(np.random.choice(a))将使用它遇到的值(a[1]在上面的示例中)删除列表的第一个元素,这可能不是所选元素(例如,a[7]).
df1 = pd.DataFrame({'a':[1,2,3],'x':[4,5,6],'y':[7,8,9]})
df2 = pd.DataFrame({'b':[10,11,12],'x':[13,14,15],'y':[16,17,18]})
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用来自的键合并两个数据帧df1.我想我应该用pd.merge它,但我怎么能告诉pandas将值放在b列df2的a列中df1.这是我想要实现的输出:
a x y
0 1 4 7
1 2 5 8
2 3 6 9
3 10 13 16
4 11 14 17
5 12 15 18
Run Code Online (Sandbox Code Playgroud) 使用pandas,是否可以计算包含从两个不同函数计算的值的单个交叉表(或数据透视表)?
import pandas as pd
import numpy as np
c1 = np.repeat(['a','b'], [50, 50], axis=0)
c2 = list('xy'*50)
c3 = np.repeat(['G1','G2'], [50, 50], axis=0)
np.random.shuffle(c3)
c4=np.repeat([1,2], [50,50],axis=0)
np.random.shuffle(c4)
val = np.random.rand(100)
df = pd.DataFrame({'c1':c1, 'c2':c2, 'c3':c3, 'c4':c4, 'val':val})
frequencyTable = pd.crosstab([df.c1,df.c2],[df.c3,df.c4])
meanVal = pd.crosstab([df.c1,df.c2],[df.c3,df.c4],values=df.val,aggfunc=np.mean)
Run Code Online (Sandbox Code Playgroud)
因此,两个表中的行和列都是相同的,但我真正喜欢的是具有频率和平均值的表:
c3 G1 G2
c4 1 2 1 2
c1 c2 freq val freq val freq val freq val
a x 6 0.624931 5 0.582268 8 0.528231 6 0.362804
y 7 0.493890 8 0.465741 3 0.613126 …Run Code Online (Sandbox Code Playgroud) 使用熊猫:
df = pd.DataFrame({'n':['d','a','b','c','c','a','d','b'], 'v':[1,2,1,2,2,1,1,1]})
Run Code Online (Sandbox Code Playgroud)
如何重命名元素df.n,以便a更改为x,bto y,cto w和dto z,从而导致:
n v
0 z 1
1 x 2
2 y 1
3 w 2
...
Run Code Online (Sandbox Code Playgroud) df=pd.DataFrame(index=['x','y'], data={'a':[1,2],'b':[3,4]})
Run Code Online (Sandbox Code Playgroud)
如何将列名转换为列的值?这是我想要的输出
c1 c2
x 1 a
x 3 b
y 2 a
y 4 b
Run Code Online (Sandbox Code Playgroud) 在python中是否有一个等效的boot和boot.ci?在R我会这样做
library(boot)
result <- boot(data,bootfun,10000)
boot.ci(result)
Run Code Online (Sandbox Code Playgroud) 假设我的数据框包含以下数据:
>>> df = pd.DataFrame({'a':['l1','l2','l1','l2','l1','l2'],
'b':['1','2','2','1','2','2']})
>>> df
a b
0 l1 1
1 l2 2
2 l1 2
3 l2 1
4 l1 2
5 l2 2
Run Code Online (Sandbox Code Playgroud)
l1应该对应,1而l2应该对应2.我想创建一个新列' c',对于每一行,c = 1if a = l1和b = 1(或a = l2和b = 2).如果a = l1和b = 2(或a = l2和b = 1)然后c = 0.
生成的数据框应如下所示:
a …Run Code Online (Sandbox Code Playgroud) python ×10
pandas ×7
dataframe ×2
merge ×2
combinations ×1
crosstab ×1
dictionary ×1
filter ×1
indexing ×1
numpy ×1
pivot-table ×1
random ×1
rename ×1