python中的数据帧操作

2024-06-16 09:59:21 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here

用这样的方式转换每个单独行的数据帧最有效的方法是什么:

    p1  p2  prog
0   A   B   C

像这样分成三行?你知道吗

    n1  n2  edge_type
0   A   A/B marriage
1   B   A/B marriage
2   A/B C   child

或者等效地,将df转换为DF,如下所示:

df = pd.DataFrame({'prog':['C'], 'p1': ['A'], 'p2': ['B']})
dF = pd.DataFrame({'edge_type':['marriage', 'marriage', 'child'], 'n1': ['A', 'B', 'A/B'], 'n2': ['A/B', 'A/B', 'C']})

定义一个worker函数并在R中使用mapply是很简单的,但是在Python中这样做我还是很费劲。你知道吗


Tags: 数据方法childdataframedftype方式pd
2条回答
df = pd.DataFrame({'prog':['C'], 'p1': ['A'], 'p2': ['B']})

data = []
for row in df.itertuples():
    for i in range(1,4):
        if i in (1,2):
            data.append(('marriage', row[i], '/'.join([row[1], row[2]])))
        else:
            data.append(('child', '/'.join([row[1], row[2]]), row[i]))
dF = pd.DataFrame.from_records(data, columns=('edge_type', 'n1', 'n2'))

我试着应用这个函数,但最终得到了一个非常粗糙的解决方案。我相信有更好的解决办法。你知道吗

使用apply

def func(s):
    combo = '/'.join([s['p1'], s['p2']])
    l = [[s['p1'], combo, 'marriage'], [s['p2'], combo, 'marriage'], [combo, s['prog'], 'child']]
    return pd.DataFrame(l, columns=['n1', 'n2', 'edge_type']).unstack()

再举个例子:

df.apply(func, axis=1).stack().reset_index(drop=True)

退货

    n1   n2 edge_type
0    A  A/B  marriage
1    B  A/B  marriage
2  A/B    C     child

相关问题 更多 >