pandas 根据每一行的字段汇总列并将结果追加到每一行[重复]

sqxo8psd  于 2023-02-02  发布在  其他
关注(0)|答案(2)|浏览(168)
    • 此问题在此处已有答案**:

How to assign a name to the size() column?(5个答案)
2天前关闭。
我想根据每一行的字段汇总一列,并将结果作为一个字段(列)附加到每一行。例如,我想统计一列有多少个值等于每一行的该列的值("条件"列只是为了简化,它实际上是使用每一行的字段计算的值。):
原始 Dataframe :

condition
0   True
1   False
2   True
3   True
4   False
5   True
6   True

结果:

condition   Count
0   True        5.0
1   False       2.0
2   True        5.0
3   True        5.0
4   False       2.0
5   True        5.0
6   True        5.0

我只能想到使用iterrows以迭代的方式来做这件事,尽管这不是经典的Pandas方式:

result = pd.DataFrame(index=df.index)

for i,r in df.iterrows():
    df2=df.loc[(df['condition']==r['condition'])]
    result.loc[i,'condition']=r['condition']
                                              
    result.loc[i,'Count']=df2.shape[0]  # How many items are the same as that row's 'condition' field

有什么典型的矢量化方法可以做到这一点吗?谢谢您的帮助。

woobm2wo

woobm2wo1#

您可以使用value_countsmap方法执行此操作:

tally = df['condition'].value_counts()
df['Count'] = df['condition'].map(tally)
print(df)

输出:

condition  Count
0       True      5
1      False      2
2       True      5
3       True      5
4      False      2
5       True      5
6       True      5
w8f9ii69

w8f9ii692#

你可以在panda中使用groupby方法,根据每一行的字段汇总一列,下面是一个例子:

df = pd.DataFrame({'condition': [True, False, True, True, False, True, True]})
df['Count'] = df.groupby('condition')['condition'].transform('count')

这将为您提供所需的结果:

condition  Count
0      True      5
1     False      2
2      True      5
3      True      5
4     False      2
5      True      5
6      True      5

相关问题