我有两个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。
答案 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'])