我在下面的文件中有以下内容,并想知道如何将它们连接在一起,我知道如果它们是两个独立的数据帧,但是值的范围从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答案都有效 问题是我想选择两个作为正确的答案!
答案 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 ...进行概括。