使用多个日期连接数据帧(Vlookup)

2024-06-12 03:37:53 发布

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

我在下面的一个文件中有以下内容,我想知道如何将它们连接在一起,如果它们是两个独立的数据帧,我知道如何连接,但是值的范围从D1到D20+,创建这么多的多个数据帧是不实际的。我的目标是加入他们的D1日期如下。你知道吗

    D1           D1value  D2           D2value  D3           D3value   
    1/2/2018     21.14    1/2/2018     11.14    1/6/2018     1.55
    1/3/2018     19.13    1/3/2018     51.14    1/13/2018    2.66
    1/6/2018     19.89    1/14/2018    31.14    1/14/2018    3.77
    1/13/2018    20.24   
    1/14/2018    20.91

加入后应该

    D1           D1value  D2value  D3value   
    1/2/2018     21.14    11.14    NaN
    1/3/2018     19.13    51.14    NaN
    1/6/2018     19.89    NaN      1.55 
    1/13/2018    20.24    NaN      2.66
    1/14/2018    20.91    31.14    3.77

有什么建议吗?你知道吗

对于平方答案,添加df:

df = pd.concat([proc(d) for k, d in df.groupby(g, 1)], axis=1)

piRSquared和jp\u数据分析答案都有效 问题是我想选择两者作为正确答案!你知道吗


Tags: 文件数据答案目标dfnan建议d2
3条回答

您也可以在下列情况下使用连接函数:

df = D1.join(D2.set_index('D2'), on = 'D1', how = 'left')
df = D1.join(D3.set_index('D3'), on = 'D1', how = 'left')
...

现在您可以看到模式并尝试使用loop调用D2,D3。。。概括一下。你知道吗

我假设列是成对的。你知道吗

def proc(d):
    v = d.dropna().values
    return pd.Series(v[:, 1], pd.to_datetime(v[:, 0]), name=d.columns[1])

g = np.arange(len(df.columns)) // 2
pd.concat([proc(d) for k, d in df.groupby(g, 1)], axis=1)

           D1value D2value D3value
2018-01-02   21.14   11.14     NaN
2018-01-03   19.13   51.14     NaN
2018-01-06   19.89     NaN    1.55
2018-01-13   20.24     NaN    2.66
2018-01-14   20.91   31.14    3.77

设置
我假设你的文件看起来像这样:

D1,D1value,D2,D2value,D3,D3value
1/2/2018,21.14,1/2/2018,11.14,1/6/2018,1.55
1/3/2018,19.13,1/3/2018,51.14,1/13/2018,2.66
1/6/2018,19.89,1/14/2018,31.14,1/14/2018,3.77
1/13/2018,20.24,,,,
1/14/2018,20.91,,,,

我和你一起读的

df = pd.read_csv('test.csv')

这里有一个方法。你知道吗

import pandas as pd

n = 3

# convert date columns from strings to datetimes
df.loc[:, ['D'+str(i) for i in range(1, n+1)]] = \
df.loc[:, ['D'+str(i) for i in range(1, n+1)]].apply(pd.to_datetime)

# create dataframe
df = pd.concat([pd.Series(df.set_index('D'+str(i))['D'+str(i)+'value']).dropna() \
                for i in range(1, n+1)], axis=1)

#             D1value  D2value  D3value
# 2018-01-02    21.14    11.14      NaN
# 2018-01-03    19.13    51.14      NaN
# 2018-01-06    19.89      NaN     1.55
# 2018-01-13    20.24      NaN     2.66
# 2018-01-14    20.91    31.14     3.77

相关问题 更多 >