gpt4 book ai didi

python - PANDAS:需要帮助计算列中存在的项目列表的实例,以及对匹配的另一列中的值求和

转载 作者:行者123 更新时间:2023-12-05 03:20:00 32 4
gpt4 key购买 nike

我有一个像这样的数据框:

import pandas as pd
from datetime import datetime
data = {'PRACTICE': [1,2,3,1,1], 'Postcode': ['BT1234', 'BT4321', 'AB1234', 'BT1234', 'BT1234'],
'month': [datetime(2013, 4, 1), datetime(2013, 4, 1), datetime(2013, 4, 1), datetime(2013, 3, 1), datetime(2013, 3, 1)],
'VTN_NM': ['Gabapentin', 'Gabapentin', 'Diazepam', 'Diazepam', 'Gabapentin elixir'],
'Total Items': [6, 5, 11, 4, 3]}
df = pd.DataFrame(data)

以及 VTM_NM 列的搜索词列表:

search_terms = [
'Gabapentin', 'Pregabalin', 'Tramadol', 'Oxycodone',
'Morphine', 'Diazepam', 'Temazepam', 'Codeine',
'Buprenorphine', 'Methadone', 'Methylphenidate'
]

当列表项出现在 VTM_NM 列中时,我想根据月份、PRACTICE 和邮政编码列对所有搜索词的总项目列进行计数/求和。因此,当列表中的任何项目出现在 VTM_NM 列中时,它会添加给定月份实践和邮政编码值的总数量。然后可以将计数值存储在新列中,例如gabapentin_count 等。如果给定邮政编码的诊所在一个月内开了 5 次加巴喷丁,则将添加 5 次处方中每一次的总计数。

所以对于这个输入,输出应该是这样的:

<表类="s-表"><头>练习邮政编码月Gaba_countDiaz_count<正文>1BT12342013.3341BT12342013.4602BT43212013.4503AB12342013.4011等等

我想我需要使用 groupby() 来解决这个问题,但我想不通,而且我在网上找到的代码也没有一个有效。我怎样才能得到这个结果?

最佳答案

像这样使用列表过滤数据:

df2 = df[df['VTN_NM'].isin(search_terms)]

然后旋转你的数据:

df2 = df2.pivot_table(index=['PRACTICE', 'Postcode', 'month'], 
columns=['VTN_NM'],
fill_value=0,
aggfunc='sum')
print(df2)

输出:

                             Total Items
VTN_NM Diazepam Gabapentin
PRACTICE Postcode month
1 BT1234 2013-03-01 4 0
2013-04-01 0 6
2 BT4321 2013-04-01 0 5
3 AB1234 2013-04-01 11 0

或者您的意思是搜索每个术语并修复该列:

df['VTN_NM'] = df['VTN_NM'].str.extract('(' + '|'.join(search_terms) + ')')

旋转,同上:

out = df.pivot_table(index=['PRACTICE', 'Postcode', 'month'], 
columns=['VTN_NM'],
fill_value=0,
aggfunc='sum')
print(out)

输出:

                             Total Items
VTN_NM Diazepam Gabapentin
PRACTICE Postcode month
1 BT1234 2013-03-01 4 3
2013-04-01 0 6
2 BT4321 2013-04-01 0 5
3 AB1234 2013-04-01 11 0

或者,两者的结合……先修复再过滤。从您的帖子中看不完全清楚。


使用 groupby,你并没有离开考虑那条路线:

df['terms'] = df['VTN_NM'].str.extract('(' + '|'.join(search_terms) + ')')
print(df.groupby(['PRACTICE', 'Postcode', 'month', 'terms'])['Total Items'].sum().unstack('terms').fillna(0))

# Output:

terms Diazepam Gabapentin
PRACTICE Postcode month
1 BT1234 2013-03-01 4.0 3.0
2013-04-01 0.0 6.0
2 BT4321 2013-04-01 0.0 5.0
3 AB1234 2013-04-01 11.0 0.0

关于python - PANDAS:需要帮助计算列中存在的项目列表的实例,以及对匹配的另一列中的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73299637/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com