Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于另一个数据帧的条件的数据帧摘要数学?_Python_Pandas_Dataframe - Fatal编程技术网

Python 基于另一个数据帧的条件的数据帧摘要数学?

Python 基于另一个数据帧的条件的数据帧摘要数学?,python,pandas,dataframe,Python,Pandas,Dataframe,我有相当于3D数据的数据,但无法安装推荐的熊猫 df_值 df_条件 我知道我可以像这样得到df\u值中所有值的平均值 df_values.stack().mean() 问题 IIUC布尔掩码 df[c.eq('y')].mean().mean() 6.5 或者你可能想要 df[c.eq('y')].sum().sum()/c.eq('y').sum().sum() 5.833333333333333 IIUC布尔掩码 df[c.eq('y')].mean().mean() 6.5 或

我有相当于3D数据的数据,但无法安装推荐的熊猫

df_值 df_条件 我知道我可以像这样得到
df\u值中所有值的平均值

df_values.stack().mean()

问题 IIUC布尔掩码

df[c.eq('y')].mean().mean()
6.5
或者你可能想要

df[c.eq('y')].sum().sum()/c.eq('y').sum().sum()
5.833333333333333
IIUC布尔掩码

df[c.eq('y')].mean().mean()
6.5
或者你可能想要

df[c.eq('y')].sum().sum()/c.eq('y').sum().sum()
5.833333333333333

假设您希望找到所有值的平均值,其中
df_条件==“y”

res = np.nanmean(df_values[df_condition.eq('y')])  #5.833333333333333
使用NumPy比Pandas
stack
where
便宜得多:

# Pandas 0.23.0, NumPy 1.14.3
n = 10**5
df_values = pd.concat([df_values]*n, ignore_index=True)
df_condition = pd.concat([df_condition]*n, ignore_index=True)

%timeit np.nanmean(df_values.values[df_condition.eq('y')])       # 32 ms
%timeit np.nanmean(df_values.where(df_condition == 'y').values)  # 88 ms
%timeit df_values[df_condition.eq('y')].stack().mean()           # 107 ms

假设您希望找到所有值的平均值,其中
df_条件==“y”

res = np.nanmean(df_values[df_condition.eq('y')])  #5.833333333333333
使用NumPy比Pandas
stack
where
便宜得多:

# Pandas 0.23.0, NumPy 1.14.3
n = 10**5
df_values = pd.concat([df_values]*n, ignore_index=True)
df_condition = pd.concat([df_condition]*n, ignore_index=True)

%timeit np.nanmean(df_values.values[df_condition.eq('y')])       # 32 ms
%timeit np.nanmean(df_values.where(df_condition == 'y').values)  # 88 ms
%timeit df_values[df_condition.eq('y')].stack().mean()           # 107 ms

在条件为“y”的情况下,您可以仅使用DataFrame和Series方法获得所有值的平均值,如下所示

df_values[df_condition.eq('y')].stack().mean()  # 5.833333333333333


这简单吗?:)

在条件为“y”的情况下,您可以使用以下数据帧和系列方法获得所有值的平均值

df_values[df_condition.eq('y')].stack().mean()  # 5.833333333333333

这简单吗?:)

试试看:

np.nanmean(df.where(dfcon == 'y').values)
输出:

5.8333333333
尝试:

输出:

5.8333333333

很简单。很简单。谢谢W-B.我得查一下IIUC的意思。。。如果我理解正确。。。对吧?@天哪,是的。:-)谢谢W-B.我得查一下IIUC的意思。。。如果我理解正确。。。对吧?@天哪,是的。:-)有趣的jpp。我的实际数据帧非常大,因此这个选项可能非常有用
df。其中
表示的是
df\u值。其中
,是吗?@GollyJer,这里不使用
where
,但应该是
df\u值
。我还纠正了一个小错误,请参阅更新。测试所有这些方法
np.nanmean(df_values.values[df_condition.eq('y')])
返回了错误的答案。@GollyJer,我看到它返回了
5.833333
。你看到它回来了吗?奇怪。。。我得到了
6.22222
。其他人都返回
5.833333
。有趣的jpp。我的实际数据帧非常大,因此这个选项可能非常有用
df。其中
表示的是
df\u值。其中
,是吗?@GollyJer,这里不使用
where
,但应该是
df\u值
。我还纠正了一个小错误,请参阅更新。测试所有这些方法
np.nanmean(df_values.values[df_condition.eq('y')])
返回了错误的答案。@GollyJer,我看到它返回了
5.833333
。你看到它回来了吗?奇怪。。。我得到了
6.22222
。其他的都返回
5.833333