如何连接列

时间:2017-11-30 10:02:34

标签: python pandas dataframe data-analysis

我已经下载了两个数据框,我想将它们连在一起(我不是程序员)。 我使用的是Python 2.7。

我的代码是这样的:

from pandas_datareader.data import Options
import datetime
import pandas as pd

pd.set_option('display.width',280) # default is 80

aapl = Options('aapl', 'yahoo')
expiry = datetime.date(2017, 1, 1)

data_CALL = aapl.get_call_data(expiry=expiry)
data_PUT = aapl.get_put_data(expiry=expiry)

#The first DataFrame
Q1=data_CALL.iloc[0:5, 0:8]
print(Q1.head())

#The Second DataFrame
Q2=data_PUT.iloc[0:5:, 0:8]
print(Q2.head())


#I got this DataFrame
concat=pd.concat([Q1,Q2])
print(concat)

结果如下: enter image description here

我希望我的最终数据框看起来像这样: enter image description here

2 个答案:

答案 0 :(得分:0)

您的结果看起来像是使用groupby对象的结果。即您已按strike将数据分组为分组属性。

这样做,您需要删除每个数据帧的复合索引;从它的外观来看,你的索引为(Strik, Expiry, Type, Symbol)

我只能假设这是在get_call_dataget_put_data函数中设置的,因为它们直接返回数据帧。我建议你导入 此时,原始数据帧没有设置任何索引;这样strike 将保留为您可以轻松用作分组属性的列,如下所示。

实际上分组非常简单:

combined = pd.concat([Q1, Q2])
grouped = combined.groupby('strike')  # single grouping attribute

验证结果:

for name, group in grouped:
    print name
    print group

操纵数据(这里只是几个例子):

# 1. using groupby builtin functions

first_group = grouped.first()  # you can do last()
first_strike = grouped.get_group('115')  # return you a dataframe as given by you

# 2. using list

group_list = list(grouped)
first_group = group_list[0]  # return a tuple with 2 elements: name and DataFrame
first_strike_name = group_list[0][0]
first_strike_data = group_list[0][1]

您可以阅读有关Python GroupBy here的更多信息。

答案 1 :(得分:0)

根据您的描述,您有两个数据帧Q1 and Q2,并且您希望在"Strike"索引上连接这两个数据帧。 对于相同的代码将是这样的,

Concetenateddf=pd.concat([Q1.set_index('Strike'),Q2.set_index('Strike')], axis=1, join='inner')

现在,如果您要Concetenateddf.head(),那么您将获得与预期相似的结果。 concetenated dataframe