我有一个数据框,我试图按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
有人知道我在做什么错吗?
答案 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操作应该可以正常工作。