python-3.x - Python Pandas SUMIF excel 等价物

标签 python-3.x excel pandas

我不知道如何在我的 python 脚本中完成某个任务。
我有一个数据框,其中包含特定主题的媒体报道。我的专栏之一命名了特定文章的作者,例如...
enter image description here
我正在尝试创建一个数据透视表来显示列中每个记者的总数,如下所示

datajournalist = company1_topline.pivot_table(index='AuthorUsername', values='ContentID', aggfunc= np.count_nonzero )
这会给我类似的东西
AuthorUsername                                                 count_nonzero
Aaron Mehta                                                      1              
Aamer Madhani                                                    1               
Aamer Madhani ; Ben Fox                                          1      
我正在寻找的是一种让数据透视表也计算出现在多个值单元格中的名称的方法,以获得每个作者的真实计数。因此,例如,具有“Aamer Madhani ; Ben Fox”的行也将计入“Aamer Madhani”的计数,因此仅“Aamer Madhani”的行将计数为 2 而不是 1 等等......是有办法吗?在 excel 中,这可以通过 SUMIF 来实现,但我不知道如何使用 Python/Pandas 来实现。
期望的输出
AuthorUsername                                                 count_nonzero
Aaron Mehta                                                      1              
Aamer Madhani                                                    2               
Aamer Madhani ; Ben Fox                                          1     
如果有人能指出我正确的方向,将不胜感激。

最佳答案

使用具有 AuthorUsername 的 DataFrame像这样的列:

            AuthorUsername
0              Aaron Mehta
1            Aamer Madhani
2  Aamer Madhani ; Ben Fox
你可以做:
import collections

# Remove leading and trailing spaces (if any).
df['AuthorUsername'] = df['AuthorUsername'].str.strip()

# Get unique authors and their counts.
authors_counts = collections.Counter(df['AuthorUsername'].str.split('\s*;\s*').sum())

# Add to new column.
real_counts = collections.defaultdict(lambda: 1, authors_counts)
df['count_nonzero'] = [real_counts[a] for a in df['AuthorUsername']]

print(df)
结果:
            AuthorUsername  count_nonzero
0              Aaron Mehta              1
1            Aamer Madhani              2
2  Aamer Madhani ; Ben Fox              1
评论后编辑 - 总结更多指标:
在评论之后,这里是一个更通用的版本,也可以总结 Metrics列,以及可能的其他列。
输入数据框:
            AuthorUsername  Metrics
0              Aaron Mehta      1.3
1            Aamer Madhani      2.0
2  Aamer Madhani ; Ben Fox      0.5
代码:
df['AuthorUsername'] = df['AuthorUsername'].str.strip()
df['single_authors'] = df['AuthorUsername'].str.split('\s*;\s*')

df['count_nonzero'] = 1
single_metrics = df.explode('single_authors').groupby('single_authors').sum()
multiple_metrics = df[df['single_authors'].map(len) > 1].groupby('AuthorUsername').sum()

all_metrics = pd.concat([single_metrics, multiple_metrics]).rename_axis('AuthorUsername').reset_index()

df = df.drop(columns=['Metrics', 'count_nonzero', 'single_authors']).merge(all_metrics, how='left', on='AuthorUsername')

print(df)
结果:
            AuthorUsername  Metrics  count_nonzero
0              Aaron Mehta      1.3              1
1            Aamer Madhani      2.5              2
2  Aamer Madhani ; Ben Fox      0.5              1

关于python-3.x - Python Pandas SUMIF excel 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72240369/

相关文章:

python-3.x - Tensorflow 结构化数据 model.predict() 返回错误的概率

python - 失败到 'pip3 install apex' 导致构建密码失败(已安装)

python - 增加特定行的列中的整数值

java - 使用 Apache POI 将填充颜色和边框应用到 Excel 范围

pandas - 获取列表 azure synapse 工作区中 data Lake gen2 文件夹的所有内容

python - 如何在 Tkinter 的 Canvas 小部件中放置小部件?

excel - 增加序列vba

vba - 数据验证和工作表更改事件

python - 如何在 Pandas Dataframe 中迭代计数

python - 如何为每隔一行的数据框的浮点索引添加一个值?