GVKun编程网logo

在Pandas中,有没有Python的方法可以用来制作列联表?(python 列联表)

15

想了解在Pandas中,有没有Python的方法可以用来制作列联表?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于python列联表的相关问题,此外,我们还将为您介绍关于python–创建

想了解在Pandas中,有没有Python的方法可以用来制作列联表?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于python 列联表的相关问题,此外,我们还将为您介绍关于python – 创建具有计数和百分比的列联表Pandas、python – 在pandas中使用布尔数组索引对象的最惯用的方法是什么?、python – 在Pandas中有一种方法可以在dataframe.apply中使用之前的行值,同时在apply中计算前一个值吗?、python – 在pandas中的行到列的新知识。

本文目录一览:

在Pandas中,有没有Python的方法可以用来制作列联表?(python 列联表)

在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

python – 创建具有计数和百分比的列联表Pandas

有没有更好的方法在pandas中使用pd.crosstab()或pd.pivot_table()创建列联表,以生成计数和百分比.

当前解决方案

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中使用布尔数组索引对象的最惯用的方法是什么?

python – 在pandas中使用布尔数组索引对象的最惯用的方法是什么?

我特别在谈论Pandas版本0.11,因为我正忙着用.loc或.iloc替换我对.ix的使用.我喜欢这样一个事实,即区分.loc和.iloc会告诉我是打算按标签还是整数位置进行索引.我看到任何一个人都会接受一个布尔数组,但我想保持他们的使用纯粹,以清楚地传达我的意图.

最佳答案
在11.0中,所有三种方法都有效,suggested in the docs的方式就是使用df [mask].然而,这不是在位置上完成的,而是纯粹使用标签,所以在我看来loc最能描述实际发生的事情.

更新:我在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中计算前一个值吗?

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中的行到列

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

解决方法

使用str.split和stack.

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中的行到列等更多相关知识的信息可以在本站进行查询。

本文标签: