Python实现如下要求:一个Dataframe名为df1,一个Dataframe名为df2,两个Dataframe的字段名相同,先按照维度字段m1、m2,对数值字段x1,x2计算(两个Dataframe的差值)/df1对应字段值,并得出x1和x2字段计算出来的大于0的所有值的中位数和第二四分位数
时间: 2024-02-05 20:11:51 浏览: 149
下面是Python代码实现:
```python
import pandas as pd
import numpy as np
from scipy.stats import scoreatpercentile
# 创建示例数据
df1 = pd.DataFrame({'m1': ['A', 'A', 'B', 'B'], 'm2': ['X', 'Y', 'X', 'Y'], 'x1': [10, 20, 30, 40], 'x2': [100, 200, 300, 400]})
df2 = pd.DataFrame({'m1': ['A', 'A', 'B', 'B'], 'm2': ['X', 'Y', 'X', 'Y'], 'x1': [11, 18, 32, 41], 'x2': [110, 190, 310, 390]})
# 计算差值
df_diff = (df2[['x1', 'x2']] - df1[['x1', 'x2']]) / df1[['x1', 'x2']]
# 合并维度和差值
df_merge = pd.concat([df1[['m1', 'm2']], df_diff], axis=1)
# 计算大于0的值的中位数和第二四分位数
x1_median = np.median(df_merge[df_merge['x1'] > 0]['x1'])
x1_2q = scoreatpercentile(df_merge[df_merge['x1'] > 0]['x1'], 75)
x2_median = np.median(df_merge[df_merge['x2'] > 0]['x2'])
x2_2q = scoreatpercentile(df_merge[df_merge['x2'] > 0]['x2'], 75)
```
这段代码首先创建了两个示例DataFrame df1和df2,然后计算了它们的差值,并将维度和差值合并到一个新的DataFrame df_merge中。最后,使用numpy和scipy库计算了x1和x2字段计算出来的大于0的所有值的中位数和第二四分位数。
阅读全文