python - Pandas,对行中所有三个值都可用的元素求和

标签 python pandas

假设我有一个像这样的数据框:

Country   Year    Orange  Apple Plump
US        2008    17      29     19
US        2009    11      12     16
US        2010    14      16     38
Spain     2008    11      NULL   33
Spain     2009    12      19     17
France    2008    17      19     21
France    2009    19      22     13
France    2010    12      11     15
Italy     2009    NULL    NULL   PRIVATE
Italy     2010    15      16     17
Italy     2011    42      NULL   PRIVATE

首先,我想获取行的平均值,但我只想考虑所有橙色、苹果、丰满信息可用的行

其次,如果至少只有一个水果信息可用,我会尝试获取不同水果之间的最大差异(例如,2008 年美国的差异为 12)。例如,2011 年意大利将为 42

第三,我想对拥有 2008 年至 2010 年所有年份信息的国家重复同样的操作。 任何帮助将不胜感激

最佳答案

首先需要清理数据、转换为正确的类型并根据需要填充任何空值。 在这个例子中,我们不需要任何填充

对于 ['Apple', 'Orange', 'Plump'] 中的 col: df[col] = pd.to_numeric(df[col], '强制')

pandas.to_numeric 的第二个参数函数定义如何处理错误值。

然后我们可以逐行应用函数来实现所需的结果。

该函数应接受以数据帧的列名称作为键的系列,应用逻辑并返回一个元组,该元组形成附加列。

df[['fruitmean', 'fruitdiff']] = df.apply(myfunc, axis=1)

我们定义myfunc如下:

def myfunc(x):
    vals = pd.Series([x.Apple, x.Orange, x.Plump])
    valfilled = vals.fillna(0)
    nulls = vals.isnull().sum()
    fruitmean = vals.mean() if nulls == 0 else np.nan
    fruitdiff = valfilled.max() - valfilled.min() if nulls < len(vals) else np.nan
    return pd.Series([fruitmean, fruitdiff])

关于python - Pandas,对行中所有三个值都可用的元素求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43663467/

相关文章:

Python:将时间舍入到最接近的秒和分钟

python - 遍历 xml 文档

python - 极值的直方图条不可见

python - 如何将月份和年份放在 Python Pandas 的同一列中

python-3.x - 无法将我的 Pandas 数据框导出到 excel

python - 如何从 Elasticsearch 中获取所有索引数据

Python, Pandas 将列一分为二

python - 通过 groupby 建立开始/结束日期

python - 如何计算 Pandas 数据框中的重复行?

python - 使用 float 索引合并两个 Pandas 数据帧