我想在此数据框上创建一个额外的列:
Index Value
0 22,88,22,24
1 24,24
2 22,24
3 11,22,24,12,24,24,22,24
4 22
因此,将值出现的次数存储在新列中:
Index Value 22 Count
0 22,88,22,24 2
1 24,24 1
2 22,24 1
3 11,22,24,12,24,24,22,24 2
4 22 1
我想对value
列中的多个不同值重复此过程。
我对Python的基本了解告诉我:
df['22 Count'] = df['Value'].count('22')
我已经尝试过这个版本和其他一些版本,但是我一定缺少一些东西。
答案 0 :(得分:3)
如果只想计算一个值,请使用str.count
:
df['22 Count'] = df['Value'].str.count('22')
print (df)
Value 22 Count
Index
0 22,88,22,24 2
1 24,24 0
2 22,24 1
3 11,22,24,12,24,24,22,24 2
4 22 1
对于所有列都需要计数:
from collections import Counter
df1 = df['Value'].apply(lambda x: pd.Series(Counter(x.split(','))), 1).fillna(0).astype(int)
或者:
df1 = pd.DataFrame([Counter(x.split(',')) for x in df['Value']]).fillna(0).astype(int)
或者:
from sklearn.feature_extraction.text import CountVectorizer
countvec = CountVectorizer()
counts = countvec.fit_transform(df['Value'].str.replace(',', ' '))
df1 = pd.DataFrame(counts.toarray(), columns=countvec.get_feature_names())
print (df1)
11 12 22 24 88
0 0 0 2 1 1
1 0 0 0 2 0
2 0 0 1 1 0
3 1 1 2 4 0
4 0 0 1 0 0
最后一次添加到原始文件中:
df = df.join(df1.add_suffix(' Count'))
print (df)
Value 11 Count 12 Count 22 Count 24 Count \
Index
0 22,88,22,24 0 0 2 1
1 24,24 0 0 0 2
2 22,24 0 0 1 1
3 11,22,24,12,24,24,22,24 1 1 2 4
4 22 0 0 1 0
88 Count
Index
0 1
1 0
2 0
3 0
4 0
答案 1 :(得分:0)
您很近。但是您的语法会尝试将一系列视为列表。相反,您可以在转换为count
后使用list
方法 :
from operator import methodcaller
df['22_Count'] = df['Value'].str.split(',').apply(methodcaller('count', '22'))
print(df)
Index Value 22_Count
0 0 22,88,22,24 2
1 1 24,24 0
2 2 22,24 1
3 3 11,22,24,12,24,24,22,24 2
4 4 22 1
使用方法shown by @jezrael。