pandas dataframe可以实现SQL中的count case吗?
原创

pandas dataframe可以实现SQL中的count case吗?

好文
试试语音读文章

热门回答:

谢邀

答案是完全可以。除此之外。pandas还提供各种复杂的表格数据操作。我们看看下面的例子

pandas

pandas官网:

https://pandas.pydata.org/

Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析。同时也提供数据清洗功能。pandas两个主要的数据结构包括DataFrame和Series。

DataFrame是Pandas中的一个表格型的数据结构。包含有一组有序的列。每列可以是不同的值类型(数值、字符串、布尔型等)。DataFrame即有行索引也有列索引。可以被看做是由Series组成的字典。

Series是一种类似于一维数组的对象。是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。

DataFrame

接下来我们用dataframe来实现一些对表格的count操作

创建一个dataframe的数据。pandas中的dataframe等价于sql中的table

其他观点:

下面是我的实现过程。使用df.groupby().apply(func)的方式实现的。

df

Out[65]:

name Age Height Score State

0 Jane 30 165 4.6 NY

1 Nick 20 70 8.3 TX

2 Aaron 22 120 9.0 FL

3 Penelope 40 80 3.3 AL

4 Jaane 20 162 4.0 NY

5 Nicky 30 72 8.0 TX

6 Armour 20 124 9.0 FL

7 Ponting 25 81 3.0 AL

def func(x):

return x[x.Age==20].Age.count(), x[x.Age==30].Age.count()

df.groupby(by=['State']).apply(func)

Out[64]:

State

AL (0, 0)

FL (1, 0)

NY (1, 1)

TX (1, 1)

dtype: object

本来想分别返回Age==20 和 Age==30 的人数。返回两个字段的。但是现在只是返回了一个字段。字段值是一个tuple。没有展开成两个字段

找到答案了。apply的函数返回一个Series就行了

def func(x):

return pd.Series({'Age_20': x[x.Age==20].Age.count(), 'Age_30': x[x.Age==30].Age.count()})

df.groupby(by=['State']).apply(func)

Out[71]:

Age_20 Age_30

State

AL 0 0

FL 1 0

NY 1 1

TX 1 1

其他观点:

  当我们使用Python进行数据分析时。有时可能需要根据DataFrame其他列中的值向pandas DataFrame添加一列。

  尽管这听起来很简单。但是如果我们尝试使用if-else条件语句来做。可能会变得有些复杂。值得庆幸的是。有一种使用numpy做到这一点的简单。好方法!

  要学习如何使用它。我们来看一个特定的数据分析问题。我们拥有4,000多个AAA教育推文的数据集。附有图像的推文会获得更多的赞和转发吗?让我们做一些分析找出答案!

  我们将从导入pandas和numpy开始。并加载数据集以查看其外观。

  我们可以看到我们的数据集包含有关每个推文的一些信息。包括:

  1)date —推文发布的日期

  2)time —发推文的时间

  3)tweet -该推文的实际文本

  4)mentions -推文中提及的任何其他Twitter用户

  5)photos —推文中包含的任何图像的URL

  6)replies_count -在推文上的回复数量

  7)retweets_count -推文的转发数

  8)likes_count —在推文上的喜欢次数

  我们还可以看到photos数据的格式有些奇怪。

  使用np.where()添加具有正确/错误条件的pandas列

  对于我们的分析。我们只想查看带有图像的推文是否获得更多的交互。因此我们实际上不需要图像URL。让我们尝试创建一个名为的新列hasimage。该列将包含布尔值- True如果该tweet包含图像。False则不包含图像。

  为此。我们将使用numpy的内置where()函数。此函数按顺序接受三个参数:我们要测试的条件。条件为true时分配给新列的值以及条件为false时分配给新列的值。看起来像这样:

  在我们的数据中。我们可以看到没有图像的推文始终[]在该photos列中具有值。我们可以使用信息并np.where()创建新列hasimage。如下所示:

  在上方。我们可以看到我们的新列已添加到我们的数据集。并且已正确标记了tweet。其中包括图像为True。其他图像为False。

  现在我们有了hasimage专栏。让我们快速制作几个新的DataFrame。一个用于所有图像推文。一个用于所有无图像推文。我们将使用布尔过滤器进行此操作:

  现在。我们已经创建了那些。我们可以使用内置的数学函数.mean()来快速比较每个DataFrame中的推文。

  我们将使用print()语句使结果更易于阅读。我们还需要记住使用str()来将.mean()计算结果转换为字符串。以便可以在我们的打印语句中使用它:

  根据这些结果。似乎包括图像可能会促进AAA教育的更多社群媒体的交互。有图片的推文的平均赞和转发次数是没有图片的推文的三倍。

  添加条件更复杂的pandas专栏

  这种方法效果很好。但是如果我们想添加一个条件更复杂的新列(超出True和False的条件)怎么办?

  例如。为了更深入地研究这个问题。我们可能要创建一些交互性“层”。并评估到达每个层的推文所占的百分比。为了简单起见。让我们使用Likes来衡量交互性。并将tweet分为四个层次:

  1)tier_4 -2个或更少的喜欢

  2)tier_3 — 3-9个赞

  3)tier_2 — 10-15个赞

  4)tier_1 — 16个赞

  为此。我们可以使用称为的函数np.select()。我们给它两个参数:一个条件列表。以及一个我们想要分配给新列中每一行的值的对应列表。

  这意味着顺序很重要:如果conditions满足列表中的第一个条件。则列表中的第一个值values将分配给该行的新列。大数据分析使用numpy在pandas dataframe上添加列https://www.aaa-cg.com.cn/data/2376.html如果满足第二个条件。则将分配第二个值。等等。

  让我们看一下它在Python代码中的外观:


  太棒了!我们创建了另一个新列。该列根据我们的(虽然有些武断)层排名系统对每个tweet进行了分类。

  现在。我们可以使用它来回答有关我们的数据集的更多问题。例如:1级和4级推文中有多少百分比具有图像?

  在这里。我们可以看到尽管图像似乎有所帮助。但它们似乎并不是成功所必需的。

  尽管这是一个非常肤浅的分析。但我们已经在这里实现了我们的真正目标:根据有关现有列中值的条件语句向pandas DataFrames添加列。

  当然。这是可以以多种方式完成的任务。np.where()而np.select()只是许多潜在的两种方法。

https://www.toutiao.com/i6846264263237960204/

您还感兴趣的文章推荐

以上就是由互联网推广工程师 网创网 整理编辑的,如果觉得有帮助欢迎收藏转发~

分享到 :
相关推荐

发表评论

登录... 后才能评论

评论(2)

  • 少女恶习 永久VIP 2022年12月28日 01:07:12

    数据,图像,条件,让我们,可以看到,函数,字段,语句,可以使用,是一个

  • 滴蜡泪 永久VIP 2022年12月28日 01:07:12

    没想到大家都对pandas dataframe可以实现SQL中的count case吗?感兴趣,不过这这篇解答确实也是太好了

  • 对不起是种借口 永久VIP 2022年12月28日 01:07:12

    谢邀答案是完全可以。除此之外。pandas还提供各种复杂的表格数据操作。我们看看下面的例子pandaspandas