在 pandas 中使用 pivot.table 重塑数据的问题
Problems with reshaping data using pivot.table in pandas
我的数据框如下所示,有多个不同的钻孔/[DH] 穿过单个地下结构,[VARIABLE] 和 [DISTANCE_TO] 结构本身,距离为 0结构内。变量是浮点数,为了简单起见,这里改为 X。
[DH] [VARIABLE] [DISTANCE_TO]
DH111 X 3
DH111 X 2
DH111 X 1
DH111 X 0
DH111 X 1
DH111 X 2
DH111 X 4
DH222 X 3
DH222 X 2
DH222 X 1
DH222 X 0
DH222 X 0
DH222 X 1
DH222 X 2
DH333 X 2
DH333 X 1
DH333 X 0
DH333 X 1
DH333 X 2
我正在尝试使用 pandas 数据透视函数来更改数据,因此我有一列用于 DISTANCE_TO,每个 DHID 都有 VARIABLE,如下所示:
[DISTANCE_TO] [DH111 VAR] [DH222 VAR] [DH333 VAR]
4 NaN X NaN
3 X X NaN
2 X X X
1 X X X
0 X X X
0 NaN X NaN
1 X X X
2 X X X
3 X NaN NaN
4 NaN NaN NaN
这是我使用的代码 df_split = pd.pivot_table(df,index=[‘DHID', 'DISTANCE_TO])
但我没有按照我的意愿拆分 DHID,它只是将 [DISTANCE_TO] 重新排列为数字升序...这可能不起作用的一个原因是因为某些 DHID 通过结构的时间更长,例如在 DH222 中有两行,其中 0 是一个值,我不确定这将如何干扰。
您还需要在 pivot_table
中指定列和值。
您是对的,存在如何 select 多个值第一个的问题。这就是pivot_table
的aggfunc
参数的作用。默认情况下,它是 np.mean
,它只适用于数字类型。如果您的变量是字符串,例如 'X'
,您可以例如 select 第一个 'first'
:
>>> df.pivot_table(columns='[DH]', index='[DISTANCE_TO]', values='[VARIABLE]', aggfunc='first')
[DH] DH111 DH222 DH333
[DISTANCE_TO]
0 X X X
1 X X X
2 X X X
3 X X NaN
4 X NaN NaN
您也可以编写自己的 aggfunc
,它基本上是一个从 [VARIABLE]
列接收 pd.Series
个值的函数,它需要 return 个单个标量值。因此,要使用 lambda 执行与 first
相同的操作,您可以执行以下操作:
>>> df.pivot_table(columns='[DH]', index='[DISTANCE_TO]', values='[VARIABLE]', aggfunc=lambda s: s.iloc[0])
[DH] DH111 DH222 DH333
[DISTANCE_TO]
0 X X X
1 X X X
2 X X X
3 X X NaN
4 X NaN NaN
我的数据框如下所示,有多个不同的钻孔/[DH] 穿过单个地下结构,[VARIABLE] 和 [DISTANCE_TO] 结构本身,距离为 0结构内。变量是浮点数,为了简单起见,这里改为 X。
[DH] [VARIABLE] [DISTANCE_TO]
DH111 X 3
DH111 X 2
DH111 X 1
DH111 X 0
DH111 X 1
DH111 X 2
DH111 X 4
DH222 X 3
DH222 X 2
DH222 X 1
DH222 X 0
DH222 X 0
DH222 X 1
DH222 X 2
DH333 X 2
DH333 X 1
DH333 X 0
DH333 X 1
DH333 X 2
我正在尝试使用 pandas 数据透视函数来更改数据,因此我有一列用于 DISTANCE_TO,每个 DHID 都有 VARIABLE,如下所示:
[DISTANCE_TO] [DH111 VAR] [DH222 VAR] [DH333 VAR]
4 NaN X NaN
3 X X NaN
2 X X X
1 X X X
0 X X X
0 NaN X NaN
1 X X X
2 X X X
3 X NaN NaN
4 NaN NaN NaN
这是我使用的代码 df_split = pd.pivot_table(df,index=[‘DHID', 'DISTANCE_TO])
但我没有按照我的意愿拆分 DHID,它只是将 [DISTANCE_TO] 重新排列为数字升序...这可能不起作用的一个原因是因为某些 DHID 通过结构的时间更长,例如在 DH222 中有两行,其中 0 是一个值,我不确定这将如何干扰。
您还需要在 pivot_table
中指定列和值。
您是对的,存在如何 select 多个值第一个的问题。这就是pivot_table
的aggfunc
参数的作用。默认情况下,它是 np.mean
,它只适用于数字类型。如果您的变量是字符串,例如 'X'
,您可以例如 select 第一个 'first'
:
>>> df.pivot_table(columns='[DH]', index='[DISTANCE_TO]', values='[VARIABLE]', aggfunc='first')
[DH] DH111 DH222 DH333
[DISTANCE_TO]
0 X X X
1 X X X
2 X X X
3 X X NaN
4 X NaN NaN
您也可以编写自己的 aggfunc
,它基本上是一个从 [VARIABLE]
列接收 pd.Series
个值的函数,它需要 return 个单个标量值。因此,要使用 lambda 执行与 first
相同的操作,您可以执行以下操作:
>>> df.pivot_table(columns='[DH]', index='[DISTANCE_TO]', values='[VARIABLE]', aggfunc=lambda s: s.iloc[0])
[DH] DH111 DH222 DH333
[DISTANCE_TO]
0 X X X
1 X X X
2 X X X
3 X X NaN
4 X NaN NaN