在python中,在双条目表的第一个位置插入列

2024-09-30 10:40:19 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我得到了一个表,我想用df.pivot_table()修改我的数据帧,结果是这样的:

Dataframe

但是现在我想把这些站点和它们的经纬度值联系起来。这些是我在另一个数据帧中拥有的列,我认为一个很好的方法是将这些变量放在这个数据帧中的station列(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

更新:我使用以下方法从数据集获取第一个表: df = old_df.pivot_table('DepthBLS', ['latlon'], 'Date')

所以我的问题也从一开始就解决了: df = old_df.pivot_table('DepthBLS', ['latlon','latdeg','londeg'], 'Date')

无需重新编制索引。抱歉,现在我知道这有点傻了!但我得到的答复是非常有用的情况下,我有一个复式表,没有原始数据来处理。你知道吗


Tags: 数据方法dataframedfdate站点tablelatlon
1条回答
网友
1楼 · 发布于 2024-09-30 10:40:19

关于使用df.insert()得到的错误,函数没有返回(即返回None),如果使用df = df.insert(...)分配数据帧,这可能是问题的根源。而忽略赋值,只使用df.insert(...)。你知道吗

如果你仍然有问题,有其他方法来实现这一点。如果latdeglondeg列位于与此列对齐的单独数据帧中,则可以使用以下方式添加它们(其中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

相关问题 更多 >

    热门问题