gpt4 book ai didi

Python Pandas 系列 if else 箱线图

转载 作者:行者123 更新时间:2023-11-28 19:04:10 25 4
gpt4 key购买 nike

我有很多字典格式的数据,我正在尝试使用 pandas 打印基于 IF ELSE 语句的字符串。对于我的示例,我将在 dict 中编写一些数据并隐藏到 Pandas:

df = pd.DataFrame(dict(a=[1.5,2.8,9.3],b=[7.2,3.3,4.9],c=[13.1,4.9,15.9],d=[1.1,1.9,2.9]))

df

返回:

    a   b   c   d
0 1.5 7.2 13.1 1.1
1 2.8 3.3 4.9 1.9
2 9.3 4.9 15.9 2.9

我的 IF ELSE 语句:

for col in df.columns:
if (df[col] < 4).any():
print('Zone %s does not make setpoint' % col)
else:
print('Zone %s is Normal' % col)

返回:

Zone a does not make setpoint
Zone b does not make setpoint
Zone c is Normal
Zone d does not make setpoint

但现在我想添加一个额外的内容来创建一个箱形图,我没有在其中设置设定点,并对它在设置点中的数据框进行平均。我知道这是 pandas 系列,但是可以使用 pandas.Series.plot.box() 吗?

这是我在 df.apply(lamba x:) 函数中使用的 IF ELSE 语句,我一直在尝试让箱线图在 pandas 系列中工作。 . 非常感谢任何建议!

import matplotlib.pyplot as plt

def _print(x):
if (x < 4).any():
print('Zone %s does not make setpoint' % x.name)
df.boxplot()
plt.show()
else:
print('Zone %s is Normal' % x.name)
print('The average is %s' % x.mean())

我在调用 df.apply(lambda x: _print(x)) 时遇到错误

module 'matplotlib' has no attribute 'show'

最佳答案

当然,您可以像 df['a'].plot.box() 一样调用 pandas.Series.plot.box() 来获取列的箱线图一个

为了符合你的问题,我会这样做:

def _print(x):
if (x < 4).any():
print('Zone %s does not make setpoint' % x.name)
df[x.name].plot.box() #call x.name to retrieve the column name
plt.show()
print(df[x.name].describe())
else:
print('Zone %s is Normal' % x.name)
print('The average is %s' % x.mean())
print('---')

df.apply(lambda x: _print(x))

zone Bzone C 的输出摘录如下所示。

enter image description here

请注意,您可以添加 .describe() 来获取箱线图和其他统计信息描述(参见 documentation )。

尽管如此,根据建议的解决方案 here,我会以不同的方式解决问题.


另一种解决方案

您可以过滤您的数据帧以拆分是否设置点:

s = df.apply(lambda x: not (x < 4).any())

然后在没有达到设定点的那个上绘制方框。
如果变化不是太大,并且没有那么多区域,请将所有内容绘制在一个图中:

df[s[~s].index].boxplot()
plt.show()

enter image description here

或者将它们分开:

for col in s[~s].index:
df[col].plot.box()
plt.show()

在这两种情况下,获取 dataframe 中的统计信息:

statdf = df[s[~s].index].describe()
print(statdf)

a b d
count 3.000000 3.000000 3.000000
mean 4.533333 5.133333 1.966667
std 4.178915 1.960442 0.901850
min 1.500000 3.300000 1.100000
25% 2.150000 4.100000 1.500000
50% 2.800000 4.900000 1.900000
75% 6.050000 6.050000 2.400000
max 9.300000 7.200000 2.900000

通过这种方式,您可以使用 statdf.loc['mean'] 获取统计数据(例如,'mean')。

如果您想打印达到设定点的均值:

print(df[s[s].index].mean())

c 11.3
Name: mean, dtype: float64

关于Python Pandas 系列 if else 箱线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48908828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com