我有两个数据帧,我想合并到1.它们的长度不等,但包含一些相同的信息。
这是第一个数据帧
BOROUGH TYPE TCOUNT
MAN SPORT 5
MAN CONV 3
MAN WAGON 2
BRO SPORT 2
BRO CONV 3
其中A指定位置,B表示类别,C表示计数 而另一个
BOROUGH CAUSE CCOUNT
MAN ALCOHOL 5
MAN SIZE 3
BRO ALCOHOL 2
此处A与其他数据帧中的位置相同。但D是另一个类别,E是该位置的D的计数。
我想要的(而且无法做到的)是获得以下内容:
BOROUGH TYPE TCOUNT CAUSE CCOUNT
MAN SPORT 5 ALCOHOL 5
MAN CONV 3 SIZE 3
MAN WAGON 2 NaN NaN
BRO SPORT 2 ALCOHOL 2
BRO CONV 3 NaN NaN
“ - ”可以是任何东西。最好是一个字符串,上面写着“Nothing”。如果它们默认为NaN值,我想这只是用字符串替换它们的问题。
注意:使用Pandas和Python
修改:
输出:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 233 entries, 0 to 232
Data columns (total 3 columns):
BOROUGH 233 non-null object
CONTRIBUTING FACTOR VEHICLE 1 233 non-null object
RCOUNT 233 non-null int64
dtypes: int64(1), object(2)
memory usage: 7.3+ KB
None
<class 'pandas.core.frame.DataFrame'>
Int64Index: 83 entries, 0 to 82
Data columns (total 3 columns):
BOROUGH 83 non-null object
VEHICLE TYPE CODE 1 83 non-null object
VCOUNT 83 non-null int64
dtypes: int64(1), object(2)
memory usage: 2.6+ KB
None
答案 0 :(得分:2)
在列&#39; A&#39;,&#39; B&#39;上执行left
类型merge
对于lhs和&#39; A&#39; D&#39; D&#39;对于rhs,因为这些是你的关键列
In [16]:
df.merge(df1, left_on=['A','B'], right_on=['A','D'], how='left')
Out[16]:
A B C D E
0 1 1 3 1 5
1 1 2 2 2 3
2 1 3 1 NaN NaN
3 2 1 1 1 2
4 2 2 4 NaN NaN
修改强>
您的问题已更改,但基本上您可以使用combine_first
:
In [26]:
merged = df.combine_first(df1)
merged
Out[26]:
BOROUGH CAUSE CCOUNT TCOUNT TYPE
0 MAN ALCOHOL 5 5 SPORT
1 MAN SIZE 3 3 CONV
2 MAN ALCOHOL 2 2 WAGON
3 BRO NaN NaN 2 SPORT
4 BRO NaN NaN 3 CONV
您看到的NaN
&#39;原因&#39;是字符串&#39; NaN&#39;,我们可以使用fillna
来替换这些值:
In [27]:
merged['CAUSE'] = merged['CAUSE'].fillna('Nothing')
merged['CCOUNT'] = merged['CCOUNT'].fillna(0)
merged
Out[27]:
BOROUGH CAUSE CCOUNT TCOUNT TYPE
0 MAN ALCOHOL 5 5 SPORT
1 MAN SIZE 3 3 CONV
2 MAN ALCOHOL 2 2 WAGON
3 BRO Nothing 0 2 SPORT
4 BRO Nothing 0 3 CONV