说我有以下的数据帧,我想改变列的两个元素c是对应于列前两个元素a是等于1平等2.
>>> df = pd.DataFrame({"a" : [1,1,1,1,2,2,2,2], "b" : [2,3,1,4,5,6,7,2], "c" : [1,2,3,4,5,6,7,8]})
>>> df.loc[df["a"] == 1, "c"].iloc[0:2] = 2
>>> df
a b c
0 1 2 1
1 1 3 2
2 1 1 3
3 1 4 4
4 2 5 5
5 2 6 6
6 2 7 7
7 2 2 8
Run Code Online (Sandbox Code Playgroud)
第二行中的代码不起作用,因为iloc设置了副本,因此不修改原始数据帧.我该怎么做?
从Epoch开始,将Pandas Timestamp转换为nano的最有效方法是什么?
import pandas as pd
ns = 1470924597871000000
timestamp = pd.to_datetime(ns, unit="ns")
Run Code Online (Sandbox Code Playgroud)
然后怎么样
timestamp => 1470924597871000000 ns???
Run Code Online (Sandbox Code Playgroud) 我有一个包含NaN和True作为值的系列.我想要另一个系列来生成一个数字序列,这样每当NaN将该系列值设置为0并且在两个NaN行之间我需要执行cumcount.
即
输入:
colA
NaN
True
True
True
True
NaN
True
NaN
NaN
True
True
True
True
True
Run Code Online (Sandbox Code Playgroud)
产量
ColA Sequence
NaN 0
True 0
True 1
True 2
True 3
NaN 0
True 0
NaN 0
NaN 0
True 0
True 1
True 2
True 3
True 4
Run Code Online (Sandbox Code Playgroud)
如何在熊猫中执行此操作?
我在Visual Studio 2008中编写了一个C++应用程序.它在几个头文件中有很多已定义的结构,例如:
#pragma pack( push , 1 ) // align on a 1-byte boundary
typedef struct myStruct_tag
{
/* ... */
} myStruct_t;
#pragma pack( pop ) // end 1-byte boundary alignment
Run Code Online (Sandbox Code Playgroud)
在源文件中,这些定义的结构如下使用:
void MyFunc( void )
{
myStruct_t * myStruct = NULL;
myStruct = (myStruct_t *)malloc( sizeof(myStruct_t) );
/* and so forth and so on... */
}
Run Code Online (Sandbox Code Playgroud)
即使它成功编译0错误和0警告,有时当我右键单击自定义数据类型(如in MyFunc)时,它给我一个错误:
未定义符号'myStruct_t'.
然后单击"确定"关闭对话框并按Ctrl+ Alt+ F7重建解决方案.它构建时没有任何错误或警告,因此我知道它正在找到myStruct_t编译时的定义,但是当我尝试使用Go to Definition功能时它无法找到它.我唯一想到的是这个应用程序有很多定义的结构,单字节对齐,但这不应该有所作为.有人知道如何解决这个问题吗?
如果不进行并行编程,我可以key使用下面的代码在列上合并左侧和右侧数据帧,但由于两者都非常大,因此速度太慢.有没有什么方法可以有效并行化?
我有64个内核,所以实际上我可以使用其中的63个来合并这两个数据帧.
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
result = pd.merge(left, right, on='key')
Run Code Online (Sandbox Code Playgroud)
输出将是:
left:
A B key
0 A0 B0 K0
1 A1 B1 K1
2 A2 B2 K2
3 A3 B3 K3
right:
C D key
0 C0 D0 K0
1 C1 D1 K1
2 C2 D2 K2 …Run Code Online (Sandbox Code Playgroud) python parallel-processing multithreading multiprocessing pandas
首先让我说我是熊猫新手.
我想在DataFrame中创建一个新列.我可以这样做,如我的例子所示.但我想通过链接方法来做到这一点,所以我不必分配新的变量.让我首先展示我想要实现的目标,以及到目前为止我做了什么:
In [1]:
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
In [2]:
np.random.seed(10)
df=pd.DataFrame(np.random.randint(1,5,size=(10, 3)), columns=list('ABC'))
df
Out [2]:
A B C
2 2 1
4 1 2
4 1 2
2 1 2
2 3 1
2 1 3
1 3 1
4 1 1
4 4 3
1 4 3
In [3]:
filtered_DF = df[df['B']<2].copy()
grouped_DF = filtered_DF.groupby('A')
filtered_DF['C_Share_By_Group'] =filtered_DF.C.div(grouped_DF.C.transform("sum"))
filtered_DF
Out [3]:
A B C C_Share_By_Group
4 1 2 0.4
4 …Run Code Online (Sandbox Code Playgroud) 我在python中的pandas中有一个数据框,类似于这样的东西 -
contest_login_count contest_participation_count ipn_ratio
0 1 1 0.000000
1 3 3 0.083333
2 3 3 0.000000
3 3 3 0.066667
4 5 13 0.102804
5 2 3 0.407407
6 1 3 0.000000
7 1 2 0.000000
8 53 91 0.264151
9 1 2 0.000000
Run Code Online (Sandbox Code Playgroud)
现在我想将一个函数应用于此数据帧的每一行该函数被写为 -
def findCluster(clusterModel,data):
return clusterModel.predict(data)
Run Code Online (Sandbox Code Playgroud)
我以这种方式将此函数应用于每一行 -
df_fil.apply(lambda x : findCluster(cluster_all,x.reshape(1,-1)),axis=1)
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我收到一条警告 -
DataConversionWarning:带有输入dtype对象的数据已转换为float64.
warnings.warn(msg,DataConversionWarning)
每行打印一次此警告.因为,我的数据框中有大约450K行,我的计算机挂起,同时在ipython笔记本上打印所有这些警告消息.
但是为了测试我的功能,我创建了一个虚拟数据帧并尝试在其上应用相同的功能,并且它运行良好.这是代码 -
t = pd.DataFrame([[10.35,100.93,0.15],[10.35,100.93,0.15]])
t.apply(lambda x:findCluster(cluster_all,x.reshape(1,-1)),axis=1)
Run Code Online (Sandbox Code Playgroud)
这个输出是 -
0 1 2
0 4 4 4
1 4 …Run Code Online (Sandbox Code Playgroud) 我有一个数据帧df_energy2
df_energy2.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 29974 entries, 0 to 29973
Data columns (total 4 columns):
TIMESTAMP 29974 non-null datetime64[ns]
P_ACT_KW 29974 non-null int64
PERIODE_TARIF 29974 non-null object
P_SOUSCR 29974 non-null int64
dtypes: datetime64[ns](1), int64(2), object(1)
memory usage: 936.8+ KB
Run Code Online (Sandbox Code Playgroud)
这种结构:
df_energy2.head()
TIMESTAMP P_ACT_KW PERIODE_TARIF P_SOUSCR
2016-01-01 00:00:00 116 HC 250
2016-01-01 00:10:00 121 HC 250
Run Code Online (Sandbox Code Playgroud)
有没有可以提取小时的python功能TIMESTAMP?
亲切的问候
可以说我有
r = pd.DataFrame({'A':1 ,
'B':pd.Series(1,index=list(range(4)),dtype='float32')})
Run Code Online (Sandbox Code Playgroud)
并r['B'].describe()[['mean','std','min','max']]给出一个输出:
mean 1.0
std 0.0
min 1.0
max 1.0
Name: B, dtype: float64
Run Code Online (Sandbox Code Playgroud)
但是从上面的输出中,我应该如何摆脱或压制最后一行 " Name:B, dtype: float64"
我想出了实现这一目标的一种方法
x=r['B'].describe()[['mean','std','min','max']]
print "mean ",x['mean'],"\nstd ",x['std'],"\nmin ",x['min'],"\nmax ",x['max']
Run Code Online (Sandbox Code Playgroud)
它给出了所需的输出:
mean 1.0
std 0.0
min 1.0
max 1.0
Run Code Online (Sandbox Code Playgroud)
是否有任何清洁工可以直接从pd.describe()实现此输出
我有数据帧:
df = pd.DataFrame({'ID':[1,1,2,2,3,3],
'YEAR' : [2011,2012,2012,2013,2013,2014],
'V': [0,1,1,0,1,0],
'C':[00,11,22,33,44,55]})
Run Code Online (Sandbox Code Playgroud)
我想按ID分组,并在每个组中选择V = 0的行.
这似乎不起作用:
print(df.groupby(['ID']).filter(lambda x: x['V'] == 0))
Run Code Online (Sandbox Code Playgroud)
出了错误:
TypeError:filter函数返回一个Series,但是期望一个标量bool
如何使用过滤器来实现目标?谢谢.
编辑:V上的条件可能因组而异,例如,对于ID 1,V == 0,对于ID 2,V == 1,此信息可通过另一个DF获得:
df = pd.DataFrame({'ID':[1,2,3],
'V': [0,1,0])
Run Code Online (Sandbox Code Playgroud)
那么如何在每个组内进行行过滤?