2017-05-17 85 views
0

我有以下結構的的大數據幀,其被簡化爲這個問題的目的,是指:Pandas- GROUPBY多列和從單個列

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

本質上,第一3列中的所有表示字符串數據,即時間和日期。我正在從csv文件中讀取數據幀,並且時間之後的數據在每一列中每天有多個點。

我想要做的是找到一種方法,按日期對所有數據進行分組,並在一天中創建每天平均值,這些值代表多個數據點。這是通過使用group.by(日期)很好地處理,但是我失去了所有不包含在列日期其他數據的所以結果是,像這樣:

group.by()之前的意思是():

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 

回答

1

有問題,需要集合列與stringstimes過,例如通過first,否則是omited

所以可能的解決方案是創建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 
+1

沒錯與調整,以適應我的程序,這是我一直在尋找的感謝一點點! – cd123

+0

很高興可以幫助,美好的一天! – jezrael