我有两个数据帧,一个节点连接到2或4节点元素,另一个包含关于节点的数据。我希望根据元素所连接节点的数据来平均元素的数据
这是元素dataframe。n1、n2、n3、n4对应于该元素上的节点 eID是元素ID。元素可以有2个或4个节点,并且可以有空的“n”字段:
eID n1 n2 n3 n4
0 1 4
1 4 1
2 2 7 3 6
3 1 9 8 1
4 3 4 6 3
包含节点数据的数据帧。nodeID列表示元素框架中任意“n”列中的每个节点:
nodeID dx dy dz
0 88.340153 -88.340153 23.234556
1 66.370153 -66.370153 23.632464
2 76.422513 -74.423513 11.245715
3 22.333573 -32.328673 55.345354
4 14.123763 -74.322413 14.637526
我想要得到每个元素的平均dx,dy,和dz,通过简单地平均元素上所有节点的节点dx,dy,和dz
所需的元素数据帧(我可以直接删除n1,n2。。。列(一旦我有了数据)
eID avg_dx avg_dy avg_dz
0 88.340153 -88.340153 23.234556
1 66.370153 -66.370153 23.632464
2 76.422513 -74.423513 11.245715
3 22.333573 -32.328673 55.345354
4 14.123763 -74.322413 14.637526
到目前为止我试过的:
# col is the n1, n2, n3,n4
# node frame is the dataframe of nodal data.
for col in node_col_list:
element_node_relate = element_node_relate.merge(node_frame, left_on=col, right_index=True)
# drop _x and _y suffixes from merge
element_node_relate.columns = element_node_relate.columns.map(lambda x: x.replace('_x', ''))
element_node_relate.columns = element_node_relate.columns.map(lambda x: x.replace('_y', ''))
# drop "n" columns to just leave deflection data
element_node_relate = element_node_relate[[col for col in element_node_relate.columns if not regexn.match(col)]]
# final averaging of deflection data
element_node_relate = element_node_relate.groupby(element_node_relate.columns, axis=1).mean()
# apply "avg_" to columns to indicate averaged data
element_node_relate.columns = element_node_relate.columns.map(lambda x: "avg_" + x)
我遇到的问题是,当我合并帧时,在n列中循环并合并:
for col in node_col_list: # this is the n1, n2, n3,n4
element_node_relate = element_node_relate.merge(node_frame, left_on=col, right_index=True)
我的原始元素节点关联数据帧正在删除数据。i、 条目的数量每次都减少了不少。我不想删除“n”字段为空的条目
我希望有一个更简单的方法可以通过熊猫做到这一点
感谢您的帮助
谢谢你
胡
考虑到你的两个框架:
我认为更好的方法不是循环和合并,而是使用
melt
将df1重塑为“long”格式然后,从那里,你可以加入对你的另一个框架,总结你想要的
相关问题 更多 >
编程相关推荐