想了解在Pandas中,有没有Python的方法可以用来制作列联表?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于python列联表的相关问题,此外,我们还将为您介绍关于python–创建
想了解在Pandas中,有没有Python的方法可以用来制作列联表?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于python 列联表的相关问题,此外,我们还将为您介绍关于python – 创建具有计数和百分比的列联表Pandas、python – 在pandas中使用布尔数组索引对象的最惯用的方法是什么?、python – 在Pandas中有一种方法可以在dataframe.apply中使用之前的行值,同时在apply中计算前一个值吗?、python – 在pandas中的行到列的新知识。
本文目录一览:- 在Pandas中,有没有Python的方法可以用来制作列联表?(python 列联表)
- python – 创建具有计数和百分比的列联表Pandas
- python – 在pandas中使用布尔数组索引对象的最惯用的方法是什么?
- python – 在Pandas中有一种方法可以在dataframe.apply中使用之前的行值,同时在apply中计算前一个值吗?
- python – 在pandas中的行到列
在Pandas中,有没有Python的方法可以用来制作列联表?(python 列联表)
给定一个如下所示的数据框:
A B 2005-09-06 5 -2 2005-09-07 -1 3 2005-09-08 4 5 2005-09-09 -8 22005-09-10 -2 -52005-09-11 -7 9 2005-09-12 2 8 2005-09-13 6 -5 2005-09-14 6 -5
有没有pythonic的方法来创建像这样的2x2矩阵:
1 0 1 a b 0 c d
哪里:
a = ob数,其中A和B列的相应元素均为正。
b = ob数,其中A列的相应元素在B列中为正和负。
c = obs数,其中A列的相应元素在B列中为负数和正数。
d = obs数,其中A列和B列的对应元素均为负。
对于此示例,输出为:
1 0 1 2 3 0 3 1
谢谢
答案1
小编典典让我们称呼您的数据框data
。尝试
a = data[''A'']>0b = data[''B'']>0data.groupby([a,b]).count()
python – 创建具有计数和百分比的列联表Pandas
当前解决方案
cat=[''A'',''B'',''A'',''B''] target = [True,False,True,True] import pandas as pd df=pd.DataFrame({''cat'' :cat,''target'':target})
使用交叉表
totals=pd.crosstab(df[''cat''],df[''target''],margins=True).reset_index() percentages = pd.crosstab(df[''cat''],df[''target'']).apply(lambda row: row/row.sum(),axis=1).reset_index()
合并
summaryTable=pd.merge(totals,percentages,on="cat") summaryTable.columns=[''cat'',''#False'',''#True'',''All'',''percentTrue'',''percentFalse'']
产量
+---+-----+--------+-------+-----+-------------+--------------+ | | cat | #False | #True | All | percentTrue | percentFalse | +---+-----+--------+-------+-----+-------------+--------------+ | 0 | A | 2 | 2 | 4 | 0.500000 | 0.500000 | | 1 | B | 2 | 4 | 6 | 0.333333 | 0.666667 | +---+-----+--------+-------+-----+-------------+--------------+
解决方法
In [131]: s = df.groupby(''cat'').agg({''target'': [''sum'',''count'']}).reset_index(level=0) In [132]: s.columns Out[132]: MultiIndex(levels=[[''target'',''cat''],[''sum'',''count'','''']],labels=[[1,0],[2,1]])
让我们为列名命令:
In [133]: s.columns = [col[1] if col[1] else col[0] for col in s.columns.tolist()] In [134]: s Out[134]: cat sum count 0 A 2.0 4 1 B 4.0 6 In [135]: s[''pctTrue''] = s[''sum'']/s[''count''] In [136]: s[''pctFalse''] = 1 - s.pctTrue In [137]: s Out[137]: cat sum count pctTrue pctFalse 0 A 2.0 4 0.500000 0.500000 1 B 4.0 6 0.666667 0.333333
python – 在pandas中使用布尔数组索引对象的最惯用的方法是什么?
我特别在谈论Pandas版本0.11,因为我正忙着用.loc或.iloc替换我对.ix的使用.我喜欢这样一个事实,即区分.loc和.iloc会告诉我是打算按标签还是整数位置进行索引.我看到任何一个人都会接受一个布尔数组,但我想保持他们的使用纯粹,以清楚地传达我的意图.
更新:我在github上询问过这个问题,结论是df.iloc [msk]会在pandas 11.1中给出NotImplementedError(如果是整数索引掩码)或ValueError(如果是非整数索引).
In [1]: df = pd.DataFrame(range(5),list('ABCDE'),columns=['a'])
In [2]: mask = (df.a%2 == 0)
In [3]: mask
Out[3]:
A True
B False
C True
D False
E True
Name: a,dtype: bool
In [4]: df[mask]
Out[4]:
a
A 0
C 2
E 4
In [5]: df.loc[mask]
Out[5]:
a
A 0
C 2
E 4
In [6]: df.iloc[mask] # Due to this question,this will give a ValueError (in 11.1)
Out[6]:
a
A 0
C 2
E 4
也许值得注意的是,如果你给了掩码整数索引,它会抛出一个错误:
mask.index = range(5)
df.iloc[mask] # or any of the others
IndexingError: Unalignable boolean Series key provided
这表明iloc实际上没有实现,它使用label,因此当我们尝试这个时,11.1会抛出NotImplementedError.
python – 在Pandas中有一种方法可以在dataframe.apply中使用之前的行值,同时在apply中计算前一个值吗?
Index_Date A B C D =============================== 2015-01-31 10 10 Nan 10 2015-02-01 2 3 Nan 22 2015-02-02 10 60 Nan 280 2015-02-03 10 100 Nan 250
要求:
Index_Date A B C D =============================== 2015-01-31 10 10 10 10 2015-02-01 2 3 23 22 2015-02-02 10 60 290 280 2015-02-03 10 100 3000 250
C列是根据D的值得出2015-01-31.
然后我需要使用C的值2015-01-31并乘以2015-02-01的A值并添加B.
我已尝试使用if else进行应用和移位,这会产生一个关键错误.
解决方法
df.loc[0,'C'] = df.loc[0,'D']
然后迭代剩余的行并填充计算的值:
for i in range(1,len(df)): df.loc[i,'C'] = df.loc[i-1,'C'] * df.loc[i,'A'] + df.loc[i,'B'] Index_Date A B C D 0 2015-01-31 10 10 10 10 1 2015-02-01 2 3 23 22 2 2015-02-02 10 60 290 280
python – 在pandas中的行到列
In [1]: input = pd.DataFrame({"X_1": [1],"X_2": [2],"X_3": [5],"Y_1": [1.2],"Y_2": [2.3],"Y_3": [3.4]}) In [2]: input Out[2]: X_1 X_2 X_3 Y_1 Y_2 Y_3 0 1 2 5 1.2 2.3 3.4 In [3]: output = pd.DataFrame({"X": [1,2,5],"Y": [1.2,2.3,3.4]}) In [4]: output Out[4]: X Y 0 1 1.2 1 2 2.3 2 5 3.4
解决方法
df.columns = df.columns.str.split('_',expand=True) df.stack().loc[0] X Y 1 1 1.2 2 2 2.3 3 5 3.4
注意:索引是[1,3]与原始列匹配.
今天关于在Pandas中,有没有Python的方法可以用来制作列联表?和python 列联表的介绍到此结束,谢谢您的阅读,有关python – 创建具有计数和百分比的列联表Pandas、python – 在pandas中使用布尔数组索引对象的最惯用的方法是什么?、python – 在Pandas中有一种方法可以在dataframe.apply中使用之前的行值,同时在apply中计算前一个值吗?、python – 在pandas中的行到列等更多相关知识的信息可以在本站进行查询。
本文标签: