我正在熊猫工作,试图创建一些字典来存储与特定唯一行值有关的数据字段。
示例数据:
Date, Indicator, Income
01 Jan 2000, 1.01.02 Sales, $400
02 Jan 2000, 1.01.02 Sales, $600
07 July 2000, 3.01.03 Exports, $500
示例代码:
Indicators = df['Indicator'].unique().tolist()
# to create a datafield for each unique indicator under the Indicators heading
I_dict = {I: df.loc[df['Indicator'] == I] for I in Indicators}
我的问题是指标本身真的很长-它们在开始时就有一个代码可以识别它们,但是我无法弄清楚如何将它们分开并仍然遵循此过程。
要解决此问题,我使用了以下内容:(其中'3.05.10 Overseas Exports'
是指示器)
print(I_dict['3.05.10 Overseas Exports'])
我希望将其标记为“ 3.05.10”。 这可能吗?另一个问题是,并非所有代码都具有该长度,有些是'5.02'。
答案 0 :(得分:0)
假设您有一个如下所示的数据框
df
Date Indicator Income
0 01 Jan 2000 1.01.02 Sales $400
1 02 Jan 2000 1.01.02 Sales $600
2 07 July 2000 3.01.03 Exports $500
3 01 Jan 2000 1.01 Sales A $400
4 02 Jan 2000 1.01 Sales A $600
5 07 July 2000 3.01 Exports A $500
你能做的是
import re
# this regex captures all the digits and dots. the last dot-digit combination
# is optional
r = re.compile(r"(\d+\.\d+(?:\.\d+)?)")
# create a short indicator
df['ShortInd'] = df.Indicator.map(lambda x: r.search(x).group(0))
df
Date Indicator Income ShortInd
0 01 Jan 2000 1.01.02 Sales $400 1.01.02
1 02 Jan 2000 1.01.02 Sales $600 1.01.02
2 07 July 2000 3.01.03 Exports $500 3.01.03
3 01 Jan 2000 1.01 Sales A $400 1.01
4 02 Jan 2000 1.01 Sales A $600 1.01
5 07 July 2000 3.01 Exports A $500 3.01
# create your dictionary
i_dict = {g: sub_df for g, sub_df in df.groupby('ShortInd')}
i_dict.keys()
dict_keys(['1.01', '1.01.02', '3.01', '3.01.03'])
i_dict['1.01']
Date Indicator Income ShortInd
3 01 Jan 2000 1.01 Sales A $400 1.01
4 02 Jan 2000 1.01 Sales A $600 1.01