gpt4 book ai didi

python - Pandas 使用 NaN 旋转或 reshape 数据框

转载 作者:行者123 更新时间:2023-12-03 18:39:35 25 4
gpt4 key购买 nike

我有这个数据框,我需要根据 frame 进行旋转或 reshape 山口df = {'frame': {0: 0, 1: 1, 2: 2, 3: 0, 4: 1, 5: 2}, 'pvol': {0: nan, 1: nan, 2: nan, 3: 23.1, 4: 24.3, 5: 25.6}, 'vvol': {0: 109.8, 1: 140.5, 2: 160.4, 3: nan, 4: nan, 5: nan}, 'area': {0: 120, 1: 130, 2: 140, 3: 110, 4: 110, 5: 112}, 'label': {0: 'v', 1: 'v', 2: 'v', 3: 'p', 4: 'p', 5: 'p'}}当前数据框

frame   pvol    vvol    area    label
0 NaN 109.8 120 v
1 NaN 140.5 130 v
2 NaN 160.4 140 v
0 23.1 NaN 110 p
1 24.3 NaN 110 p
2 25.6 NaN 112 p
预期产出
frame   pvol    vvol    v_area  p_area
0 23.1 109.8 110 110
1 24.3 140.5 110 110
2 25.6 160.4 112 112
前缀 vp没有必要我只需要一种方法来区分列
这就是我让它工作的方式,但它似乎很长。我确信有更好的方法
for name, tdf in df.groupby('label'):
df.loc[tdf.index, '{}_area'.format(name)] = tdf['area']

pdf = df[df['label'].eq('p')][['frame', 'label', 'pvol', 'p_area']]
vdf = df[df['label'].eq('v')][['frame', 'vvol', 'v_area']]
df = pdf.merge(vdf, on='frame', how='outer')

最佳答案

让我们试试 pivot 和 dropna :

out = df.pivot(index='frame', columns='label').dropna(axis=1)
out.columns = [f'{y}_{x}' for x,y in out.columns]
输出:
       p_pvol  v_vvol  p_area  v_area
frame
0 23.1 109.8 110 120
1 24.3 140.5 110 130
2 25.6 160.4 112 140

关于python - Pandas 使用 NaN 旋转或 reshape 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64905007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com