Python Pandas groupby删除列

时间:2019-03-19 19:55:00

标签: python pandas

SerializationProvider

因此,我在项目开始时创建了这些列以进行绘图和数据操作。在我对这些列进行了编辑并填充了某些值之后,我想对data_c执行groupby操作。

data_c["dropoff_district"] = "default value"      
data_c["distance"] = "default value"      #Formed a new column named distance for geocoder
data_c["time_of_day"] = "default value"      #Formed a new column named time of the day for timestamps

尽管在data_c上执行分组时,我还是会丢失avg_d中的“ time_of_day”和“ dropoff_district”列。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

问题是熊猫不知道如何将日期/时间对象一起添加。因此,当您告诉Pandas进行groupby然后求和时,它将抛出不知道该怎么做的列。例子

<svg width="600" height="150" font-family="monospace"  xml:space="preserve">
<defs>
<style type="text/css">
<![CDATA[ /* ADD CLASSES */
.font{text-anchor: start; font-size: 12px;font-weight: normal; font-family: "DejaVu Sans Mono", sans-serif;white-space: pre-wrap;}
]]>
</style>
</defs>

如果我只是运行您的查询,我会得到的,

df = pd.DataFrame([['2019-01-01', 2, 3], ['2019-02-02', 2, 4], ['2019-02-03', 3, 5]], 
             columns=['day', 'distance', 'duration'])
df.day = pd.to_datetime(df.day)

您可以通过告诉熊猫您想对这些列做一些不同的操作来解决此问题-例如,取第一个值,

>>> df.groupby('distance').sum()
          duration
distance          
2                7
3                5

将他们带回来

df.groupby('distance').agg({
    'duration': 'sum',
    'day': 'first'
})

答案 1 :(得分:0)

Groupby不会删除您的列。 sum()调用可以。如果这些列不是数字列,则您将不会在sum()之后保留它们。

那么您想如何保留“ time_of_day”和“ dropoff_district”列?假设您仍然希望保留它们的区别性,将它们放入groupby

data_c.groupby(['distance','time_of_day','dropoff_district']).sum().reset_index()

否则,对于相同的“距离”,您将有多个不同的“ time_of_day”。您需要先整理数据。