[英]Issue plotting selected columns of a data-frame on a map based on the values of another column using pandas
[英]How to “rearrange” a pandas data-frame using a map between columns?
我是熊貓和數據框架的新手,所以我希望這不是一個太基本的問題。
假設我(外部)合並了兩個數據幀並獲得了以下內容:
date_a symbol_a value_a type_a symbol_b date_b value_b type_b total
0 yymmdd AAAA 10 W AAAA yymmdd 2 S 12
1 yymmdd BBBB 5 W BBBB yymmdd 2 S 7
2 yymmdd CCCC 12 W NaN NaN NaN NaN NaN
3 yymmdd DDDD 15 W NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN EEEE yymmdd 5 S NaN
5 NaN NaN NaN NaN FFFF yymmdd 10 S NaN
6 NaN NaN NaN NaN GGGG yymmdd 2 S NaN
到目前為止,這正是我想要的(日期都是同一天)。
現在,假設我有一條規則告訴我我有一個映射(字典):
mapper = {'EEEE':'CCCC', 'FFFF':'DDDD'}
我可能有沒有映射到任何symbol_a的symbol_b(如上面的索引6)。
我的問題是,是否有可能根據字典給出的映射使用重新排列行,以便獲得:
date_a symbol_a value_a type_a symbol_b date_b value_b type_b total
0 yymmdd AAAA 10 W AAAA yymmdd 2 S 12
1 yymmdd BBBB 5 W BBBB yymmdd 2 S 7
2 yymmdd CCCC 12 W EEEE yymmdd 5 S 17
3 yymmdd DDDD 15 W FFFF yymmdd 10 S 25
6 NaN NaN NaN NaN GGGG yymmdd 2 S NaN
理想情況下,我還要擺脫包含NaN元素的所有行,這樣最終結果將是:
date_a symbol_a value_a type_a symbol_b date_b value_b type_b total
0 yymmdd AAAA 10 W AAAA yymmdd 2 S 12
1 yymmdd BBBB 5 W BBBB yymmdd 2 S 7
2 yymmdd CCCC 12 W EEEE yymmdd 5 S 17
3 yymmdd DDDD 15 W FFFF yymmdd 10 S 25
因此,我將您的數據框拆分為原始的2個數據框,只需更改數據框中的列名稱以適合您的用法即可:
import pandas as pd
a = pd.read_csv('test.csv')
#Split your merge df into 2 original df
del a['total']
df1 = a.loc[:, ['date_a', 'symbol_a', 'value_a', 'type_a']]
df2 = a.loc[:, ['date_b', 'symbol_b', 'value_b', 'type_b']]
df1.fillna('', inplace=True)
df2.fillna('', inplace=True)
df1 = df1[df1['date_a']!='']
df2 = df2[df2['date_b']!='']
#Add a mapping column to df2
mapper = {'EEEE':'CCCC', 'FFFF':'DDDD'}
df2['mapping'] = df2['symbol_b'].apply(lambda x: mapper.get(x) if mapper.get(x)!= None else x)
df1 = df1.merge(df2, left_on='symbol_a', right_on='mapping')
df1['total'] = df1['value_a'] + df1['value_b']
df1
df1中的結果現在是:
date_a symbol_a value_a type_a date_b symbol_b value_b type_b mapping total
0 yymmdd AAAA 10.0 W yymmdd AAAA 2.0 S AAAA 12.0
1 yymmdd BBBB 5.0 W yymmdd BBBB 2.0 S BBBB 7.0
2 yymmdd CCCC 12.0 W yymmdd EEEE 5.0 S CCCC 17.0
3 yymmdd DDDD 15.0 W yymmdd FFFF 10.0 S DDDD 25.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.