python - 迭代具有相同结构的熊猫数据帧的dict的最佳方法,以生成一个包含每个(行,列)元素总和的数据帧?
问题描述
我有一个 pandas dict,d1,其中每个值是一个两列(ID 和权重)、100 行数据框。
我想遍历字典,对于每个数据帧,我想对第 n 行中的所有“权重”值求和,其中 n 是代表该行的 1 到 100 之间的值。然后我想将输出写入另一个字典 d2,其中键是 1-100,值是值的总和。
示例 d1 值数据框:
ID Weight
1 0.021
2 0.445
3 1.018
..
..
..
99 77.31
100 234.04
本质上,假设我有 10000 个这些数据帧,并且我想将 ID 1 的所有权重值加到 10000 中,然后将 ID 2 的所有权重值加到 10000 中,依此类推,直到 ID 100。
我有一个解决方案,基本上是一个嵌套循环。它起作用了,它会起作用的。但是,我真的很想扩展我的基本 pandas / numpy 知识,我想知道是否有更 Pythonic 的方式来做到这一点?
我现有的代码:
for i in range (1,101):
tot = 0
for key, value in d1.items():
tot = tot + value.at[i,'Weight']
d2[i] = tot
非常感谢任何帮助和建议!
解决方案
您可以使用熊猫添加功能:
#create a zero filled dataframe
df = pd.DataFrame(0, index=np.arange(len(df1)), columns=df1.columns)
#iterate through dict and add values to df
for value in d1.values():
df = df.add(value)
您可以ID
通过设置您的索引df_i = df_i.set_index('ID')
,然后将它们全部添加,以便仅添加权重,然后df=df.reset_index()
在最后添加。例子:
df1 = pd.DataFrame([(1,2),(3,4),(5,6)], columns=['ID','Weight'])
ID Weight
0 1 2
1 3 4
2 5 6
df2 = pd.DataFrame([(10,20),(30,40),(50,60)], columns=['ID','Weight'])
ID Weight
0 10 20
1 30 40
2 50 60
df3 = pd.DataFrame([(100,200),(300,400),(500,600)], columns=['ID','Weight'])
ID Weight
0 100 200
1 300 400
2 500 600
d1 = {'df1':df1,'df2':df2,'df3':df3}
df = pd.DataFrame(0, index=np.arange(len(df1)), columns=df1.columns)
print(df)
for value in d1.values():
df = df.add(value)
东风:
ID Weight
0 111 222
1 333 444
2 555 666
推荐阅读
- fortran - Fortran 运行时错误:列表输入的第 1 项中的实数错误:错误终止。回溯:
- android - 在 Canvas Bitmap Android 中调整大小时图像像素化
- java - 要在 Google 登录中查找语言下拉列表的 xpath
- flutter - dart 类层次结构错误 - 'a' 没有扩展 'b' 尝试使用是或是 'b' 的子类的类型
- docker - 如何在多阶段 docker build 中引用外部 dll
- java - 如何在创建的矩形表单上触发 mouseEntered 事件,而不是在面板本身上?
- javascript - 如何设置一个主动监听功能,等待并监听来自用户的命令
- npm - 带有nodejs的pixelbook,带有错误代码1,带有npm install
- terraform - 使用 to_port 和 from_port 配置为 Terraform 入口/出口映射专用网络端口?
- kubernetes - 将单独的环境变量传递给 statefulset pod