如何在Python中将多个列合并2个CSV文件

时间:2018-05-16 23:30:24

标签: python pandas csv merge

我有两个CSV文件。 文件1 ,如下所示:

Ticker  |    Date     |   Marketcap 
  A     |  2002-03-14 |    600000
  A     |  2002-06-18 |    520000
                   .
                   .
  ABB   |  2004-03-16 |    400000
  ABB   |  2005-07-11 |    800000
                   .
                   .
  AD    |  2004-03-16 |    680000
                   .
                   .

文件2 喜欢:

Ticker  |    Date     |     Open    |    Close   |
  A     |  2002-03-14 |    580000   |    500000  |
  ABB   |  2002-03-14 |    500000   |    420000  |
  AD    |  2002-03-16 |    700000   |    670000  |
                          .
                          .
                          .
                          .

这些时段表示对于文件1 文件2 ,每个自动收报机的大量条目的值都会继续显示。第一个文件包含每个日期的所有值,每个股票代码都连续列在一行中,而第二个文件包含每年的所有值和逐个列出的股票代码。

我想要做的是合并文件1和2基于" Ticker"和"日期"看起来像:

Ticker  |    Date     |   Marketcap |    Open     |    Close   |
  A     |  2002-03-14 |    600000   |    580000   |    500000  |
  ABB   |  2002-03-14 |    520000   |    500000   |    420000  |
                                 .
                                 .

我尝试使用以下内容合并文件:

a = pd.read_csv("File1.csv")
b = pd.read_csv("File2.csv")
merged = a.merge(b, on='Date')

但我不认为这会同时影响Date和Ticker。

3 个答案:

答案 0 :(得分:2)

我认为您需要使用['Date', 'Ticker']而不是'Date'。您还可能需要根据需要指定how参数。

答案 1 :(得分:0)

试试这个:

 merged=a.merge(b, how='left',on=['Ticker', 'Date'])

答案 2 :(得分:0)

您可以尝试以下代码:

  <p:dataTable id="table" var="var" value="#{bean.array}">

                <p:column headerText="header">

                <c:if test="#{var.boolean}">
                         <h:outputText value="#{var.item}" style="color: green" />
                                                      <h:outputText value="#{var.item2}" style="color: red" />

                </c:if>

                <c:if test="#{not var.boolean}">
                 <h:outputText value="#{var.item}" style="color: red" />
                                                      <h:outputText value="#{var.item2}" style="color: green" />

                </c:if>



            </p:dataTable>

如果a = pd.read_csv("File1.csv", "\t") b = pd.read_csv("File2.csv", "\t") merged = pd.merge(a, b, how='inner', on=['Ticker', 'Date']) print merged 是:

File1.csv

Ticker Date Marketcap A 2002-03-14 600000 A 2002-06-18 520000 ABB 2004-03-16 400000 ABB 2005-07-11 800000 AD 2004-03-16 680000 是:

File2.csv

然后上面代码的输出将是:

Ticker  Date    Open    Close
A   2002-03-14  580000  500000
ABB 2004-03-16  500000  420000
AD  2004-03-16  700000  670000

<小时/> 如果您想要 Ticker Date Marketcap Open Close 0 A 2002-03-14 600000 580000 500000 1 ABB 2004-03-16 400000 500000 420000 2 AD 2004-03-16 680000 700000 670000 中的所有行并且仅匹配来自File1.csv的行,则可以改为使用此行:

File2.csv

这将产生:

merged = pd.merge(a, b, how='left', on=['Ticker', 'Date'])