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
速度快得多-可以添加一些性能计时吗?因为我认为你错了,速度要快得多-你能添加一些性能计时吗?因为我认为你错了