python - 将 Pandas 数据框乘以字典

标签 python pandas dataframe dictionary

TownA = [35, 43, 36, 39, 28, 28, 29, 25, 38, 27, 26, 32, 29, 40, 35, 41, 37, 31, 45, 34]
TownB = [27, 15, 4, 41, 49, 25, 10, 30]
Rural = [8, 14, 12, 15, 30, 32, 21, 20, 34, 7, 11, 24]
tv_viewing = TownA + TownB + Rural

labels = np.array(["TownA", "TownB", "Rural"])
stratum = np.repeat(labels, [len(TownA), len(TownB), len(Rural)], axis=0)
sample = pd.DataFrame()
sample["viewership"] = tv_viewing
sample["stratum"] = stratum
sample.groupby("stratum").mean()

上面的代码生成了一个如下所示的数据框:

<表类="s-表"> <头> 阶层 收视率 <正文> 农村 19:00 小镇A 33.9 TownB 25.125

我的目标是将这个数据框与下面的字典相乘:

Population = {"TownA": 155, "TownB": 62, "Rural": 93}

为了获得想要的结果:

<表类="s-表"> <头> 阶层 收视率 <正文> 农村 1767 小镇A 5254.5 TownB 1557.75

我不挑剔最终结果,产品可以是一个新的专栏。

我能够通过以下代码获得解决方案:

a = sample.groupby("stratum").mean().reset_index()
b = pd.DataFrame.from_dict(N, orient='index').reset_index()
ab = pd.merge(a, b, left_on='stratum', right_on='index')
ab["product"] = ab["viewership"]*ab[0]

代码生成此表:

<表类="s-表"> <头> <日> 阶层 收视率 索引 <日>0 产品 <正文> 0 农村 19.000 农村 93 1767.00 1 小镇A 33.900 小镇A 155 5254.50 2 TownB 25.125 TownB 62 1557.75

我想知道是否有更优雅的方法来解决这个问题而无需重置索引并使用诸如应用之类的东西。

我试过这段代码:

a = sample.groupby("stratum").mean().apply(lambda x: x.viewership * N[x.stratum])

只是为了得到这个错误: “系列”对象没有属性“收视率”

最佳答案

在轴 = 0 时使用 mul 方法:

out = sample.groupby("stratum").mean()
out.mul(Population, axis = 0 )

         viewership
stratum
Rural       1767.00
TownA       5254.50
TownB       1557.75

关于python - 将 Pandas 数据框乘以字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72737721/

相关文章:

Python:获取 2d 列表中前 4 个最高值

python - 如何使用 PyGObject 使窗口居中

python - Pandas - 从时间序列数据中按 10 毫秒聚合列

python - 删除系列/数据帧多索引中的列

python - 如果计数大于 pandas 中的某个值,如何更改 pd.Series 中的 bool 值

python - 获取由 scipy 创建的插值函数的公式

python - 查找 HDF5 表中列中每个唯一值的最后时间戳的有效方法

python - pandas 连接具有重复索引的列

python - Pandas 创建列列表,其中行值包含 ' & "分隔符

python - 将行分成两列并保持其他列相同