Python-熊猫列合并/串联/联接

时间:2018-09-23 18:35:02

标签: pandas dataframe merge

我已经阅读了熊猫教程,仍然需要帮助。 我是熊猫的新手,所以请多多包涵。

我有一个如下所示的csv:

#1
identifier1, identifier2,
1.1        , 1.2
2.3        , 4.4

和一个像这样的字典:

dict = {'identifier1':'3.3', 'identifier2':'2.3', 'identifier3':'1.6'}

我想用此字典更新此csv,以便将具有相同标识符的列附加到其中,并为新标识符创建一个列。

#2
identifier1, identifier2, identifier3
1.1        , 1.2        , 1.6
2.3        , 4.4        , NaN
3.3        , 2.3        , NaN

这将是此csv的重复更新,因此将来此过程将类似于:

dict = {'identifier2':'3.5', 'identifier4':'1.5'}
INSERT MERGE CODE HERE
#3
identifier1, identifier2, identifier3, identifier4
1.1        , 1.2        , 1.6        , 1.5
2.3        , 4.4        , NaN        , NaN
3.3        , 2.3        , NaN        , NaN
NaN        , 3.5        , NaN        , NaN

追加有效,但不是我想要的方式,它给了我

dict = {'identifier2':'3.5', 'identifier4':'1.5'}
new_df = pandas.Dataframe.from_dict(dict, orient='columns')
old_df.append(new_df, True)
#4
identifier1, identifier2, identifier3, identifier4
1.1        , 1.2        , 1.6        , NaN
2.3        , 4.4        , NaN        , NaN
3.3        , 2.3        , NaN        , NaN
NaN        , 3.5        , NaN        , 1.5

因此,在创建新列时,我需要将值放在第一行中。像#2或#3

.merge(old_df, new_df, how='left') 

为我提供了旧数据帧#2和旧数据帧索引串联在一起的情况。

identifier1, identifier2, identifier3, identifier1, identifier2, identifier3,
1.1        , 1.2        , 1.6
2.3        , 4.4        , NaN
3.3        , 2.3        , NaN

.merge(old_df, new_df, how='right') 
.merge(old_df, new_df, how='outer') 
.merge(old_df, new_df, how='inner') 

要么返回我的原始数据帧,要么返回与我想要的数据不符的东西,例如删除索引下的所有行。

感谢您阅读这篇长篇文章,如果您有任何疑问,请将其留在下面,我会尽力澄清任何歧义。

1 个答案:

答案 0 :(得分:0)

根据给定的数据创建一个数据框并设置列名称:

id1 = [1.1, 2.3, 3.3]
id2 = [1.2, 4.4, 2.3]
id3 = [1.6]
DF = pd.DataFrame([id1, id2, id3]).T

DF.columns = ['id1', 'id2', 'id3']

为要添加到数据框中的新数据定义一个新数据框:

dict1 = {'id2':'3.5', 'id4':'1.5'}

New_DF = pd.DataFrame.from_dict([dict1])

标识两个数据框中的列名称:

Intersection = list(set(DF.columns).intersection(New_DF.columns))

标识了仅在新数据框中的列名称:

Difference = list(set(New_DF.columns) - set(DF.columns))

将两个数据框中的列按行串联:

Final_DF = pd.concat([DF, New_DF[Intersection]], axis = 0, sort = False)

重置最终数据帧的索引:

Final_DF = Final_DF.reset_index(drop = True)

将最终数据框和仅位于新数据框中的列按列连接:

Last_DF = pd.concat([Final_DF, New_DF[Difference]], axis = 1, sort = False)

希望有帮助。