簡體   English   中英

Pandas- Groupby多列,均值來自一列

[英]Pandas- Groupby multiple columns and mean from a single column

我有一個以下結構的大型數據框,為解決這個問題而簡化了該結構:

  A     B     C D ... J K 
  date1 time1 1 1 ... 1 1
  date2 time2 2 2 ... 2 2

本質上,前3列均表示字符串數據,即時間和日期。 我正在從一個csv文件讀取的數據框,並且經過一段時間后的數據在每一天的每一天都有多個點。

我希望做的是找到一種按日期對所有數據進行分組並每天創建平均值的方法,該方法可以在一天中考慮多個數據點。 使用group.by(dates)可以很好地處理此問題,但是我丟失了date列中未包括的所有其他數據,因此結果如下:

在group.by()。mean()之前:

   A     B     C D ... J K
   date1 time1 1 1 ... 1 1
   date2 time2 2 2 ... 2 2
   date2 time3 1 1 ... 1 1

后:

   A      C   D   ... J   K
   date1  1   1       1   1
   date2  1.5 1.5 ... 1.5 1.5

我的理想輸出是將數據保留在時間列和日期列中,同時仍根據日期創建平均值。 這將導致以下結果:

理想輸出:

   A      B     C   D   ... J   K
   date1  time1 1   1       1   1
   date2  time2 1.5 1.5 ... 1.5 1.5

有一個問題,您也需要帶有stringstimes聚合列,例如, first ,否則被忽略

因此,可能的解決方案是創建dict of aggregation functions並使用groupby + agg + reset_index + reindex_axis

print (df)

   A      B      C  D  E  J  K
0  a  date1  time1  1  1  1  1
1  b  date2  time2  2  2  2  2
2  c  date2  time3  1  1  1  1

cols = ['A','B','C']
d = {x:'mean' for x in df.columns.difference(cols)}
d['A'] = 'first'
d['C'] = 'first'
print (d)
{'E': 'mean', 'D': 'mean', 'J': 'mean', 'A': 'first', 'C': 'first', 'K': 'mean'}

df1 = df.groupby('B').agg(d).reset_index().reindex_axis(df.columns, axis=1)
print (df1)
   A      B      C    D    E    J    K
0  a  date1  time1  1.0  1.0  1.0  1.0
1  b  date2  time2  1.5  1.5  1.5  1.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM