gpt4 book ai didi

python - 为列中的所有值 reshape 数据框

转载 作者:行者123 更新时间:2023-12-01 00:07:44 25 4
gpt4 key购买 nike

我有一个像这样的数据框:

number   type     X     Y           Z              
1 red 101 NaN 101,NaN
2 blue 101 40,50 101,40,50
3 green 401 70,NaN 101,70,NaN

有什么方法可以根据 Z 列标记每个 type 元素吗? Z 只是 XY 的组合版本。

所以类似:

 Number    Type         Z     X_or_Y
1 red 101 X
1 red NaN Y
2 blue 101 X
2 blue 40 Y
2 blue 50 Y
3 green 101 X
3 green 70 Y
3 green NaN Y

我正在考虑熔化功能,但不确定如何实现。

reshaped_data = pd.melt(df, id_vars =['number', 'type',
'Z'], value_vars =['X', 'Y'])

**编辑:** X_or_Y 列中的值应来自初始数据帧中的 X 和 Y 列

最佳答案

0.24+ 以下的 pandas 解决方案 DataFrame.melt首先,然后 Series.str.splitDataFrame.stack对于按 , 分解拆分值:

df1 = df.melt(id_vars =['number', 'type'], value_vars =['X', 'Y'], var_name='Flag')

s = (df1.pop('value').astype(str).str.split(',', expand=True)
.stack()
.reset_index(level=1, drop=True)
.rename('Z'))
df1 = df1.join(s).sort_values('number').reset_index(drop=True)

print (df1)
number type Flag Z
0 1 red X 101
1 1 red Y nan
2 2 blue X 101
3 2 blue Y 40
4 2 blue Y 50
5 3 green X 401
6 3 green Y 70
7 3 green Y NaN

pandas 0.24 以上的解决方案 DataFrame.explode :

df1 = df.melt(id_vars =['number', 'type'], value_vars =['X', 'Y'], var_name='Flag')

df1 = (df1.assign(value = df1['value'].astype(str).str.split(','))
.explode('value')
.sort_values('number')
.reset_index(drop=True))

print (df1)
number type Flag value
0 1 red X 101
1 1 red Y nan
2 2 blue X 101
3 2 blue Y 40
4 2 blue Y 50
5 3 green X 401
6 3 green Y 70
7 3 green Y NaN

关于python - 为列中的所有值 reshape 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59840440/

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