gpt4 book ai didi

python - 更改 Pandas 数据框形状并将其展平

转载 作者:行者123 更新时间:2023-12-04 15:20:47 26 4
gpt4 key购买 nike

我有一个数据源(csv 文件),它的形状是这样的:

enter image description here

示例原始数据如下:

id  stage   D1  D2  D3  D4  D5  D6
1 base A
1 s1 2 2 4 5
1 s2 3 3 6 7
2 base AA
2 s1 5 3 4 3
2 s2 3 3 2 4
2 s3 2 2 3 6
3 base B
3 s1 4 4 4 5
4 base BC

第一行是一个 ID,所有具有相同 ID 的行都与同一个实验相关。

当我在 Pandas 中读取它时,我需要把它弄平并改变它的形状到这个形状:

enter image description here

id  stage   D1  D2  D3_s1   D4_s1   D5_s1   D6_s1   D3_s2   D4_s2   D5_s2   D6_s2   D3_s3   D4_s3   D5_s3   D6_s3
1 base A 2 2 4 5 3 3 6 7
2 base AA 5 3 4 3 3 3 2 4 2 2 3 6
3 base B 4 4 4 5
4 base BC

在 Python 中执行此操作的最佳方法是什么?

作为一名 C/C++ 程序员,我开始使用多个循环遍历每个单元格并创建一个具有所需形状的新数据框(仍然不成功!)。

我相信应该有比遍历所有行和列更好的方法。

我的问题:

在 Python 中执行此操作的最佳方法是什么?

如何发现D2为空,可以drop掉?

最佳答案

假设您已经将数据读入 DataFrame:

  • 将其分成 2 个数据帧:base(包含带有 stage = base 的行)和 other
  • 拆开第二个数据框并更改列名
  • 将两者重新组合

代码

is_base = df['stage'] == 'base'
base = df.loc[is_base, 'id':'D2'].set_index('id')
other = df.loc[~is_base, ['id','stage','D3','D4','D5','D6']].set_index(['id', 'stage'])

other = other.unstack()
other.columns = other.columns.get_level_values(0) + '_' + other.columns.get_level_values(1)

# Reset index if needed
final = pd.merge(base, other, left_index=True, right_index=True)

关于python - 更改 Pandas 数据框形状并将其展平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63358038/

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