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



我在下面的文件中有以下内容,并且想知道如何加入它们,如果它们是两个单独的数据帧,我知道如何加入,但是值范围从d1到d20 创建如此多的多个数据范围是不切实际的。我的目标是根据D1日期根据以下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

请提供任何建议吗?

for pirsquared答案添加df:

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

pirsquared和jp_data_analysis答案有效问题是我要选择一个正确的答案!

我假设列是相邻的。

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

您也可以在Pandas中使用JOIN功能:

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

现在您可以看到该模式,并尝试使用循环调用D2,D3 ...概括此。

最新更新