我想转换/透视下面的 Dataframe ,以指示从(源)到(目标)的即时数据流。
l0 l1 l2 l3 sum
0 IN TOTAL <NA> <NA> 1
1 <NA> TOTAL OUT_A OUT_B 2
2 <NA> TOTAL <NA> OUT_C 3
在上述示例中,数据流由例如行0中的l0至l1表示。等效地,l1至l2和l2至l3表示行1中的(直接)数据流,以及行2中的l1至l3。
期望值:
source target sum
0 IN TOTAL 1
1 TOTAL OUT_A 2
2 TOTAL OUT_C 3
3 OUT_A OUT_B 2
再现性:
import pandas as pd
df = pd.DataFrame({
"l0": ['IN', pd.NA, pd.NA],
"l1": ['TOTAL','TOTAL','TOTAL'],
"l2": [pd.NA,'OUT_A', pd.NA],
"l3": [pd.NA,'OUT_B',"OUT_C"],
"sum": [1,2,3]})
pd.DataFrame({
"source": ["IN","TOTAL","TOTAL","OUT_A"],
"target": ["TOTAL","OUT_A","OUT_C","OUT_B"],
"sum": [1,2,3,2]
})
4条答案
按热度按时间5jvtdoz21#
基于
itertools.pairwise
(非nan
值)和pd.concat
函数:5ktev3wc2#
您可以使用
DataFrame.melt
通过DataFrame.dropna
使用自定义函数为幻灯片窗口删除缺失值,最后创建2列DataFrame并追加sum
列:列表理解中的另一个想法:
hm2xizp93#
Apply
一个函数,它获取每行中的非空值对,explode
将这些对扩展到单独的行,将每对扩展到单独的列,并将结果与原始 Dataframe 中的sum
列组合。6l7fqoea4#
stack
删除NA,然后使用groupby
、zip
和concat
的字典理解来合并连续的值:输出: