合并具有相同标题的列没有重复列

时间:2017-01-20 19:54:45

标签: python r

所以我尝试了很多文章,解释了如何在python中为pandas工作,或者只是一般的r,如何合并或连接,加入等。当我用我的数据测试它时,似乎没有什么能像我需要的那样工作。我将发布具有任意数字和标题的样本数据,这些数据和标题具有我的数据特征以及我希望它在最终产品中的显示方式。我通常尝试使用Genus作为我的公共列,因为该列具有最常见的信息,而所有其他列都是描述该列的信息。这些是文本文件。

数据框1:

Genus    Data    Facts    Info
Dog    1    2    N/A
Cat    3    1    N/A
Elephant    N/A    3    3
Pig    N/A    N/A    N/A
Mouse    N/A    N/A    N/A

Dataframe 2:

Genus    Info    Stats
Dog    2    3
Cat    1    2
Elephant    N/A    1
Pig    N/A    N/A
Mouse    N/A    N/A
Bird    N/A    N/A

期望的结果:

Genus    Data    Facts    Info    Stats
Dog    1    2    2    3
Cat    3    1    1    2
Elephant    N/A    3    3    1
Pig    N/A    N/A    N/A    N/A
Mouse    N/A    N/A    N/A    N/A
Bird    N/A    N/A    N/A    N/A

有没有办法用python或r创建这个结果?我对python和r有点新,并且不知道/所有/有关的内容,所以我可能只是缺少某些东西或者没有使用正确的术语进行搜索,但我已经尝试了大约3个星期了其他人对类似的情况做了什么,并试图摆脱他们。我不能使用Excel,因为它会自动将一些数字输入更改为日期,并进行其他小的更改,如果有人试图重做它,他们可能没有意识到修复这些细微差别。

2 个答案:

答案 0 :(得分:3)

以下是在python中使用pandas的方法:

<div class="owl-carousel">
<% @photo.each do | p| %>
<div> <%= cl_image_tag(p.uri) %> </div>
<% end %>
</div>

(McKinney,Python for Data Analysis,p.186)

编辑:

糟糕,我注意到两个数据框中都有一个Info列。我认为在这种情况下这会更好:

$(".owl-carousel").owlCarousel(); 
  

您可以将其视为使用您传递的对象中的数据“修补”调用对象中缺少的数据(McKinney)

编辑:

McKinney的另一个引用,第177页提供

  

import pandas as pd import numpy as np df1 = pd.DataFrame(np.random.randn(3,4), columns=['a','b','c','d'] df2 = pd.DataFrame(np.random.randn(3,2), columns=['e','f']) pd.concat([df1, df2], axis=1) # a b c d e f # 0 -1.181554 0.918146 0.547498 -0.409452 -1.852066 -0.377525 # 1 0.508757 0.219863 1.945935 1.285512 -0.076156 0.172197 # 2 -0.186153 -1.784728 -0.200416 1.873692 2.097818 0.575256 基于一个或多个键[如数据库连接]连接DataFrames行

     

df1.combine_first(df2) 沿着轴粘合或堆叠对象

     

pandas.merge可以将重叠数据拼接在一起,用一个来自另一个对象的值填充缺失值

答案 1 :(得分:2)

def getSubdictData(subdict, fieldname, prop2):
    if 'objects' in subdict[fieldname]:
        return subdict[fieldname]['objects'][0]['name']
    elif 'literals' in subdict[fieldname]:
        if prop2 in subdict[fieldname]['literals'][0]
            return subdict[fieldname]['literals'][0][prop2]
        else:
            return "0"
    else :
        return subdict[fieldname]

for i in results:

    ...

    srczn = getSubdictData(subdict, 'sourceZones', 'port')
    srcnet = getSubdictData(subdict, 'sourceNetworks', 'value')
    srcprt = getSubdictData(subdict, 'sourcePorts', 'port')
    dstzn = getSubdictData(subdict, 'destinationZones', 'port')
    dstnet = getSubdictData(subdict, 'destinationNetworks', 'value')
    dstnet = getSubdictData(subdict, 'destinationPorts', 'port')

    ...

输出

 cols_to_use = df2.columns.difference(df1.columns) # removes all duplicates
 cols_to_use=cols_to_use.union(['Genus']) #since we need Genus for joining df's keep that one

 df3=pd.merge(df1,df2[cols_to_use],on='Genus')