0%

原始数据如图:

我们要对float数据四舍五入,并把单位改为亿元。

方法一

使用 lambda 表达式。

1
2
cap_list = industry_df['MKT_CAP_ARD'].apply(lambda x: round(x / 100000000, 0)).astype(int)
cap_list

方法二

1
2
cap_list = round(industry_df['MKT_CAP_ARD'] / 100000000, 0).astype(int)
cap_list

最后需要使用 astype 函数把 float 转为 int。不然数据还是会带一位小数的,哪怕是0。

使用万得数据时,获取市值信息时,有如下几个关于市值的指标。

ev 总市值1

上市公司的股权公平市场价值。对于一家多地上市公司,区分不同类型的股份价格和股份数量分别计算类别市值,然后加总。 注:优先股不适用此类估值方法,指定证券的类型为优先股时,该指标返回为空。

这个指标,一般在行情软件里面是看不到的。各地股数 * 各地价格,最后再相加。

mkt_cap_ard 总市值2

按指定证券价格乘指定日总股本计算上市公司在该市场的估值。该总市值为计算PE、PB等估值指标的基础指标。暂停上市期间或退市后该指标不计算。 注:优先股不适用此类估值方法:指定证券的类型为优先股时,该指标返回为空。

总股本 * 股价

我们在行情软件里面一般就是看到的这个值。

mkt_cap_csrc 证监会市值

所有A股+B股的市值,不包括H股。

rt_mkt_cap 总市值

这个应该是实行行情接口才能使用。

mkt_cap

不可回测,目前还不知道有什么作用,先留在这里。

我们要对一个 DataFrame 做分组统计时,其实跟 SQL 语句的逻辑是差不多的。

groupby.sum(), groupby.count() 等等。

如果要把一个 DataFrame 里的不同列各做 sum(), count() 该如何操作呢?在这里给大家做一个演示。

1
2
3
4
5
6
7
8
9
# 原始数据
keyword_list = ['dog', 'cat', 'horse', 'dog', 'dog', 'horse']
weight_list = [0.12, 0.5, 0.07, 0.1, 0.2, 0.3]
other_keywords_list = [['cat', 'horse', 'pig'], ['dog', 'pig', 'camel'], ['dog', 'camel', 'cat'], ['cat', 'horse'], ['cat', 'horse', 'pig'], ['camel']]

# 生成DataFrame
dict = {'keyword': keyword_list, 'weight': weight_list, 'other keywords': other_keywords_list}
animaldf = pd.DataFrame(data=dict)
animaldf
  keyword weight other keywords
0 dog 0.12 [cat, horse, pig]
1 cat 0.50 [dog, pig, camel]
2 horse 0.07 [dog, camel, cat]
3 dog 0.10 [cat, horse]
4 dog 0.20 [cat, horse, pig]
5 horse 0.30 [camel]
1
2
df = animaldf.groupby('keyword').agg({'keyword': 'count', 'weight': 'sum', 'other keywords': 'sum'})
df
  keyword weight other keywords
keyword
cat 1 0.50 [dog, pig, camel]
dog 3 0.42 [cat, horse, pig, cat, horse, cat, horse, pig]
horse 2 0.37 [dog, camel, cat, camel]

这样就已经达到效果了。

如果接下来要继续对数据进行处理,可以先把 index 的名字 keyword 去掉,不去掉的话,转成列时就和现有列 keyword 名字冲突了。

然后把索引转换成列。

1
2
df.index.name = None
df.reset_index()

最后你想把列改成什么名字就随你了。