尝试在熊猫中使用汇总和函数

时间:2019-02-24 21:09:47

标签: python pandas analytics

我有一个数据框,我试图按TERRORIST&DATE对其进行分组,然后在剩余的2列FATALITIES&INJURED上运行合计求和函数。问题是,当我运行代码时,它不添加数字,而只是将它们连接起来。

例如,这是我的代码:

df_3 = df_2.groupby(by=['TERRORIST','DATE']).agg({'FATALITIES': 'sum',
                          'INJURED': 'sum'})

,它返回数字列表,例如1441133111111111222142

我相信这种情况正在发生,因为它将死亡和受伤列中的数据视为字符串而不是整数。但是当我执行以下操作

def clean_2(row):
    fatalities = row['FATALITIES']
    injured = row['INJURED']
    fatalities = pd.to_numeric(df_2['FATALITIES'])
    injured = pd.to_numeric(df_2['INJURED'])
    return pd.Series([fatalities, injured])

df_2[['FATALITIES', 'INJURED']] = df_2.apply(clean_2, axis=1)

df_3 = df_2.groupby(by=['TERRORIST','DATE']).agg({'FATALITIES': 'sum',
                          'INJURED': 'sum'})

我得到以下回溯:

ValueError: Function does not reduce

有人知道我在做什么错吗?

2 个答案:

答案 0 :(得分:1)

您应该将列转换为数字,而不是按元素进行转换:

df_2['FATALITIES'] = pd.to_numeric(df_2['FATALITIES'])
df_2['INJURED'] = pd.to_numeric(df_2['INJURED'])

df_3 = df_2.groupby(by=['TERRORIST','DATE']).agg({'FATALITIES': 'sum', 'INJURED': 'sum'})

答案 1 :(得分:0)

您要转换为数字的函数似乎太复杂了,您是否尝试过以下操作:

df_2['FATALITIES'] = df_2['FATALITIES'].astype(int)

您也可以在INJURED列中执行此操作,如果没有错误,则groupby操作应该可以正常工作。

相关问题