使用多个日期连接Dataframe(Vlookup)

时间:2018-02-17 16:46:18

标签: python pandas dataframe

我在下面的文件中有以下内容,并想知道如何将它们连接在一起,我知道如果它们是两个独立的数据帧,但是值的范围从D1到D20 +,并且创建如此多的多个不可行dataframes。我的目标是根据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

请问有什么建议吗?

对于piRSquared回答添加df:

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

piRSquared和jp_data_analysis答案都有效 问题是我想选择两个作为正确的答案!

3 个答案:

答案 0 :(得分:3)

我假设列是相邻的一对。

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')

答案 1 :(得分:1)

这是一种方式。

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

答案 2 :(得分:0)

您还可以在熊猫中使用加入功能:

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

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