sparrow
sparrow

Reputation: 11460

Add values to bottom of DataFrame automatically with Pandas

I'm initializing a DataFrame:

columns = ['Thing','Time']
df_new = pd.DataFrame(columns=columns)

and then writing values to it like this:

for t in df.Thing.unique():
    df_temp = df[df['Thing'] == t]  #filtering the df
    df_new.loc[counter,'Thing'] = t #writing the filter value to df_new
    df_new.loc[counter,'Time'] = dftemp['delta'].sum(axis=0) #summing and adding that value to the df_new
    counter += 1 #increment the row index

Is there are better way to add new values to the dataframe each time without explicitly incrementing the row index with 'counter'?

Upvotes: 2

Views: 826

Answers (1)

StarFox
StarFox

Reputation: 637

If I'm interpreting this correctly, I think this can be done in one line:

newDf = df.groupby('Thing')['delta'].sum().reset_index()

By grouping by 'Thing', you have the various "t-filters" from your for-loop. We then apply a sum() to 'delta', but only within the various "t-filtered" groups. At this point, the dataframe has the various values of "t" as the indices, and the sums of the "t-filtered deltas" as a corresponding column. To get to your desired output, we then bump the "t's" into their own column via reset_index().

Upvotes: 3

Related Questions