Python 使用外部列表计算值

Python 使用外部列表计算值,python,pandas,dataframe,Python,Pandas,Dataframe,我有这种数据帧: import pandas as pd df = pd.DataFrame() df['s1'] = ['n', 'u', 'u', 'u', 'n', 't', 't'] df['s2'] = ['n', 'n', 'u', 'u', 'n', 't', 't'] df['s3'] = ['o', 'o', 'o', 'o', 'o', 'o', 'o'] df['s4'] = ['u', 'u', 'u', 'u', 'n', 't', 't'] 我试图获得一个数据帧d

我有这种数据帧:

import pandas as pd

df = pd.DataFrame()
df['s1'] = ['n', 'u', 'u', 'u', 'n', 't', 't']
df['s2'] = ['n', 'n', 'u', 'u', 'n', 't', 't']
df['s3'] = ['o', 'o', 'o', 'o', 'o', 'o', 'o']
df['s4'] = ['u', 'u', 'u', 'u', 'n', 't', 't']
我试图获得一个数据帧df2,其中['n','u','t','o']作为索引,['s1','s2','s3','s4']作为列名,每个sX的'n','u','t','o'的数量。所以df2['n','s1']是2

感谢您的帮助。

使用所有列的值\u计数,将缺少的值替换为0并转换为整数:

df = df.apply(pd.value_counts).fillna(0).astype(int)
print (df)
   s1  s2  s3  s4
n   2   3   0   1
o   0   0   7   0
t   2   2   0   2
u   3   2   0   4
另一个解决方案是使用for Series with MultiIndex,然后使用并最后通过重塑,但在大型数据帧中这是一个较慢的解决方案:

性能:

使用所有列的值_计数,将缺少的值替换为0并转换为整数:

df = df.apply(pd.value_counts).fillna(0).astype(int)
print (df)
   s1  s2  s3  s4
n   2   3   0   1
o   0   0   7   0
t   2   2   0   2
u   3   2   0   4
另一个解决方案是使用for Series with MultiIndex,然后使用并最后通过重塑,但在大型数据帧中这是一个较慢的解决方案:

性能:

使用+要快得多 在大数据帧中

d=df.melt()
count_df=pd.crosstab(d['value'],d['variable'])
print(count_df)

variable  s1  s2  s3  s4
value                   
n          2   3   0   1
o          0   0   7   0
t          2   2   0   2
u          3   2   0   4
使用+要快得多 在大数据帧中

d=df.melt()
count_df=pd.crosstab(d['value'],d['variable'])
print(count_df)

variable  s1  s2  s3  s4
value                   
n          2   3   0   1
o          0   0   7   0
t          2   2   0   2
u          3   2   0   4
速度快得多-可以添加一些性能计时吗?因为我认为你错了,速度要快得多-你能添加一些性能计时吗?因为我认为你错了