You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame列规整:指定列仅保留对应值,无值填NaN

频率-通道数据转指定列格式的解决方法

先模拟下你的原始数据结构(假设是两列:Frequency和Channel):

| Frequency | Channel |
|-----------|---------|
| 100       | 1       |
| 100       | 2       |
| 200       | 3       |
| 300       | 1       |

目标是转成每列对应一个通道,有则显示通道号,无则留空(NaN):

| Frequency | Channel 1 | Channel 2 | Channel 3 |
|-----------|-----------|-----------|-----------|
| 100       | 1         | 2         | NaN       |
| 200       | NaN       | NaN       | 3         |
| 300       | 1         | NaN       | NaN       |

给你两种可行的代码实现:

方法一:用pivot_table快速转换

import pandas as pd

# 替换成你的实际数据df
df = pd.DataFrame({
    'Frequency': [100, 100, 200, 300],
    'Channel': [1, 2, 3, 1]
})

# 获取所有唯一通道,生成对应列名
sorted_channels = sorted(df['Channel'].unique())
target_cols = [f'Channel {c}' for c in sorted_channels]

# 透视转换,每个频率-通道组合只保留一个值
result = df.pivot_table(
    index='Frequency',
    columns='Channel',
    values='Channel',
    aggfunc='first'  # 同一频率-通道不会重复,用first/last都可以
).rename(columns=lambda x: f'Channel {x}')

# 补全缺失的通道列(如果有的话)
for col in target_cols:
    if col not in result.columns:
        result[col] = pd.NA

# 重置索引并调整列顺序
result = result[target_cols].reset_index()

方法二:分组后遍历填充(更直观)

import pandas as pd

# 替换成你的实际数据df
df = pd.DataFrame({
    'Frequency': [100, 100, 200, 300],
    'Channel': [1, 2, 3, 1]
})

# 按频率分组,把每个频率对应的通道存成列表
grouped = df.groupby('Frequency')['Channel'].apply(list).reset_index(name='temp_channels')

# 遍历所有通道,生成对应列并赋值
all_channels = sorted(df['Channel'].unique())
for chan in all_channels:
    grouped[f'Channel {chan}'] = grouped['temp_channels'].apply(lambda x: chan if chan in x else pd.NA)

# 删除临时列,得到结果
result = grouped.drop('temp_channels', axis=1)

如果你的通道号是固定范围(比如1到5),可以直接把all_channels改成[1,2,3,4,5],不用从数据里提取。

内容的提问来源于stack exchange,提问作者Emilie Sav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:25:16