我正在尝试创建一个新列,该列将为每行包含整个数据集中特定值的计数。
我有以下数据框:
import pandas as pd
df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [2,3,4,5,6], 'c':['or','ta','fl','or','fl'], 'd':[5,9,1,3,7]})
我想添加一列e
,该列为每行计数列c
的值出现在数据集中的次数,如下所示:
df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [2,3,4,5,6], 'c':['or','ta','fl','or','fl'], 'd':[5,9,1,3,7], 'e':[2,1,2,2,2]})
a b c d
0 1 2 or 5
1 2 3 ta 9
2 3 4 fl 1
3 4 5 or 3
4 5 6 fl 7
我尝试遍历整个数据集,但是没有用:
def getSum(c):
return df[df==c].sum()
def createE(df):
for index, row in df.iterrows():
row['e'] = getSum(row['c'])
return df
a b c d e
0 1 2 or 5 2
1 2 3 ta 9 1
2 3 4 fl 1 2
3 4 5 or 3 2
4 5 6 fl 7 2
答案 0 :(得分:2)
为此使用GroupBy.transform
,并为参数'count'
使用transform
:
df['e']=df.groupby('c')['c'].transform('count')
现在:
print(df)
是:
a b c d e
0 1 2 or 5 2
1 2 3 ta 9 1
2 3 4 fl 1 2
3 4 5 or 3 2
4 5 6 fl 7 2
答案 1 :(得分:2)
您可以将c列中的每个值映射为其计数。
设置
>>> df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [2,3,4,5,6], 'c':['or','ta','fl','or','fl'], 'd':[5,9,1,3,7]})
>>> df
a b c d
0 1 2 or 5
1 2 3 ta 9
2 3 4 fl 1
3 4 5 or 3
4 5 6 fl 7
解决方案
>>> df['e'] = df.c.map(df.c.value_counts())
>>> df
a b c d e
0 1 2 or 5 2
1 2 3 ta 9 1
2 3 4 fl 1 2
3 4 5 or 3 2
4 5 6 fl 7 2