我有两个dfs,一个是数据,另一个是"键"取代。我想继续"键" df,如果密钥存在于数据df中,那么在数据df中,更改为键的值并对行进行一些合并。
所以例如,这是数据df:
col1 col2 col3 total total_col1 total_col2
bbb V V X 2 DF1 DF2
ccc V X X 1 DF1
zzz X V V 2 DF2
qqq X V X 1
rrr X V V 2 DF1, DF2
这是"键" DF:
key value
bbb b value
zzz z value
qqq ----
rrr b value
因此输出值将合并具有相同值的行(bbb和rrr相同的值),如果值为' ----'然后数据将是相同的,如果没有密钥,那么数据也将是相同的。所以输出是:
col1 col2 col3 total total_col1 total_col2
b value V V V 3 DF1, DF2 DF2
ccc V X X 1 DF1
z value X V V 2 DF2
qqq X V X 1
这可能与熊猫有关吗?
答案 0 :(得分:1)
答案是肯定的。假设您有以下dataframe
作为df1
:
>>> df1 = pd.DataFrame({'key':['aaa','bbb','ccc','ddd']})
>>> df1
key
0 aaa
1 bbb
2 ccc
3 ddd
然后你有另一个dataframe
,它是名为df2
的参考表。
>>> df2
key value
0 aaa value a
1 ccc value c
为了获得以下结果,
>>> result
key
0 value a
1 bbb
2 value c
3 ddd
您必须merge
然后fillna
NaN
。
>>> df1['key'] = df1.merge(df2, on=['key'], how='left')['value'].fillna(value=df1.key, axis=0)
>>> df1
key
0 value a
1 bbb
2 value c
3 ddd
其他强>
如果key
中的df1
位于索引中,则您可以使用reset_index
将index
转换为column
。例如,
>>> df = pd.DataFrame(data={'col1':['val1','val2','val3']}, index=['aaa','bbb','ccc'])
>>> df
col1
aaa val1
bbb val2
ccc val3
>>> df.reset_index().rename(columns={'index':'key'})
key col1
0 aaa val1
1 bbb val2
2 ccc val3
答案 1 :(得分:0)
您可以使用名为update的pandas Dataframe函数。可以找到here的文档。
您可以通过以下方式使用密钥更新数据框df
df.update(keys_df)
但在此之前,请确保keys列是keys_df datafrane的索引,然后才能使用。
希望这会有所帮助。快乐的编码。 干杯!
答案 2 :(得分:0)
以下可能适合您。
# getting the row index of df
df_index = df.index
# getting the row index of keys
keys_index = keys.index
# for those indices existing in keys, we rename the coresponding ones in df
for i in keys_index:
if i in df_index and keys[i]:
df.rename(index={i: keys[i]})