在 python 中的双条目 table 的第一个位置插入列
Insert columns in the first place of a double entry table in python
所以我得到了 table 我想用 df.pivot_table()
修改我的数据框,我得到了这样的东西:
Dataframe
但现在我想将这些站点与它们的经纬度值相关联。这些是我在不同数据框中的列,我认为一个好方法是将这些变量放在该数据框中的站列 (latlon) 之前。
我尝试使用 df.insert()
但是给它 loc=0 会删除我的数据框。
有什么办法吗?或者我应该通过索引或类似的方式将它们联系起来吗?也许有一种更简单的方法来形象化我想要的东西,但我不知道。
Date 2009-01-01 00:00:00 2009-01-02 00:00:00 2009-01-03 00:00:00
latlon
321332106443701 20.40 20.33 20.30
321332106443703 19.17 19.16 19.16
321540110205501 10.99 10.97 10.98
321540110205502 10.00 9.99 9.99
我想补充的是:
latdeg londeg
32.225583 -64.736139
32.225583 -64.736139
32.225583 -64.736139
32.225583 -64.736139
更新: 我使用以下方法从数据集中获得了第一个 table:
df = old_df.pivot_table('DepthBLS', ['latlon'], 'Date')
所以我的问题也从一开始就解决了:
df = old_df.pivot_table('DepthBLS', ['latlon','latdeg','londeg'], 'Date')
并且无需重建索引。抱歉,现在我明白这有点傻了!但是我得到的回复非常有用,以防我有一个双重条目 table 并且没有原始数据可以使用。
关于使用 df.insert()
得到的错误,该函数没有 return(即 returns None
),如果您使用 [= 分配数据帧16=],这可能是问题的根源。而是省去赋值,只使用 df.insert(...)
。
如果您仍然遇到问题,还有其他方法可以实现。如果您在与此数据框对齐的单独数据框中有 latdeg
和 londeg
列,则可以使用以下方法添加它们(其中 latlondf
是您的第二个数据框,使用 .values
忽略索引):
df['latdeg'] = latlondf['latdeg'].values
df['londeg'] = latlondf['londeg'].values
默认情况下,这些列将显示在数据框的右侧,但您可以使用 df.reindex()
:
将它们放在数据框的左侧
df = df.reindex(
columns=["latdeg", "londeg"]
+ [i for i in df.columns if i not in ["latdeg", "londeg"]]
)
正在复制您的数据框并扩展一些:
import pandas as pd
import numpy as np
# replicate the dataframes
df = pd.DataFrame(
[
[20.40, 20.33, 20.30],
[19.17, 19.16, 19.1],
[10.99, 10.97, 10.98],
[10.00, 9.99, 9.99],
],
columns=["2009-01-01 00:00:00", "2009-01-02 00:00:00", "2009-01-03 00:00:00"],
index=[321332106443701, 321332106443703, 321540110205501, 321540110205502],
)
latlondf = pd.DataFrame(
[
[32.225583, -64.736139],
[32.225583, -64.736139],
[32.225583, -64.736139],
[32.225583, -64.736139],
],
columns=["latdeg", "londeg"],
)
df.columns.name = "Date"
df.index.name = "latlon"
# Options 1: insert
df.insert(0, "latdeg", latlondf["latdeg"].values)
df.insert(1, "londeg", latlondf["londeg"].values)
# Option 2 - assign and reindex
df["latdeg"] = latlondf["latdeg"].values
df["londeg"] = latlondf["londeg"].values
df = df.reindex(
columns=["latdeg", "londeg"]
+ [i for i in df.columns if i not in ["latdeg", "londeg"]]
)
# check output
df
Date latdeg londeg 2009-01-01 00:00:00 2009-01-02 00:00:00 2009-01-03 00:00:00
latlon
321332106443701 32.225583 -64.736139 20.40 20.33 20.30
321332106443703 32.225583 -64.736139 19.17 19.16 19.10
321540110205501 32.225583 -64.736139 10.99 10.97 10.98
321540110205502 32.225583 -64.736139 10.00 9.99 9.99
所以我得到了 table 我想用 df.pivot_table()
修改我的数据框,我得到了这样的东西:
Dataframe
但现在我想将这些站点与它们的经纬度值相关联。这些是我在不同数据框中的列,我认为一个好方法是将这些变量放在该数据框中的站列 (latlon) 之前。
我尝试使用 df.insert()
但是给它 loc=0 会删除我的数据框。
有什么办法吗?或者我应该通过索引或类似的方式将它们联系起来吗?也许有一种更简单的方法来形象化我想要的东西,但我不知道。
Date 2009-01-01 00:00:00 2009-01-02 00:00:00 2009-01-03 00:00:00
latlon
321332106443701 20.40 20.33 20.30
321332106443703 19.17 19.16 19.16
321540110205501 10.99 10.97 10.98
321540110205502 10.00 9.99 9.99
我想补充的是:
latdeg londeg
32.225583 -64.736139
32.225583 -64.736139
32.225583 -64.736139
32.225583 -64.736139
更新: 我使用以下方法从数据集中获得了第一个 table:
df = old_df.pivot_table('DepthBLS', ['latlon'], 'Date')
所以我的问题也从一开始就解决了:
df = old_df.pivot_table('DepthBLS', ['latlon','latdeg','londeg'], 'Date')
并且无需重建索引。抱歉,现在我明白这有点傻了!但是我得到的回复非常有用,以防我有一个双重条目 table 并且没有原始数据可以使用。
关于使用 df.insert()
得到的错误,该函数没有 return(即 returns None
),如果您使用 [= 分配数据帧16=],这可能是问题的根源。而是省去赋值,只使用 df.insert(...)
。
如果您仍然遇到问题,还有其他方法可以实现。如果您在与此数据框对齐的单独数据框中有 latdeg
和 londeg
列,则可以使用以下方法添加它们(其中 latlondf
是您的第二个数据框,使用 .values
忽略索引):
df['latdeg'] = latlondf['latdeg'].values
df['londeg'] = latlondf['londeg'].values
默认情况下,这些列将显示在数据框的右侧,但您可以使用 df.reindex()
:
df = df.reindex(
columns=["latdeg", "londeg"]
+ [i for i in df.columns if i not in ["latdeg", "londeg"]]
)
正在复制您的数据框并扩展一些:
import pandas as pd
import numpy as np
# replicate the dataframes
df = pd.DataFrame(
[
[20.40, 20.33, 20.30],
[19.17, 19.16, 19.1],
[10.99, 10.97, 10.98],
[10.00, 9.99, 9.99],
],
columns=["2009-01-01 00:00:00", "2009-01-02 00:00:00", "2009-01-03 00:00:00"],
index=[321332106443701, 321332106443703, 321540110205501, 321540110205502],
)
latlondf = pd.DataFrame(
[
[32.225583, -64.736139],
[32.225583, -64.736139],
[32.225583, -64.736139],
[32.225583, -64.736139],
],
columns=["latdeg", "londeg"],
)
df.columns.name = "Date"
df.index.name = "latlon"
# Options 1: insert
df.insert(0, "latdeg", latlondf["latdeg"].values)
df.insert(1, "londeg", latlondf["londeg"].values)
# Option 2 - assign and reindex
df["latdeg"] = latlondf["latdeg"].values
df["londeg"] = latlondf["londeg"].values
df = df.reindex(
columns=["latdeg", "londeg"]
+ [i for i in df.columns if i not in ["latdeg", "londeg"]]
)
# check output
df
Date latdeg londeg 2009-01-01 00:00:00 2009-01-02 00:00:00 2009-01-03 00:00:00
latlon
321332106443701 32.225583 -64.736139 20.40 20.33 20.30
321332106443703 32.225583 -64.736139 19.17 19.16 19.10
321540110205501 32.225583 -64.736139 10.99 10.97 10.98
321540110205502 32.225583 -64.736139 10.00 9.99 9.99