[英]pandas dataframe groupby columns and aggregate on custom function
[英]pandas groupby() with custom aggregate function to concatenate columns then rows using pandas
假設我有一個 dataframe 像:
Column1 Column2 Column3 Column4
1 I am abc
3 on weekend holidays
1 I do business
2 I am xyz
3 I do nothing
2 I do job
使用 pandas 應用 groupby() 后,預期結果是:
Column1 Column2
1 I am abc I do business
2 I am Xyz I do job
3 On weekend holidays I do nothing
所需的聚合首先適用於列而不是行。
如何執行?
你有沒有嘗試過:
df['newcol'] = df.apply(lambda x: " ".join(x[1:]), axis=1)
df.groupby('Column1').agg({'newcol': lambda x: " ".join()})
首先使用DataFrame.set_index
和DataFrame.stack
,然后在GroupBy.agg
中聚合join
:
df1 = (df.set_index('Column1')
.stack()
.groupby("Column1")
.agg(' '.join)
.reset_index(name='Column2'))
print (df1)
Column1 Column2
0 1 I am abc I do business
1 2 I am xyz I do job
2 3 on weekend holidays I do nothing
你能試試這個嗎? 首先將您想要的列的單詞組合成新列,然后使用groupby
將它們連接在一起。
df['new_col'] = df['Column2'] + str(" ") + df['Column3'] + str(" ") + df['Column4']
df.groupby('Column1')['new_col'].agg(lambda x: ' '.join(x.astype(str)))
Column1
1 I am abc I do business
2 I am xyz I do job
3 on weekend holidays I do nothing
Name: new_col, dtype: object
你可以嘗試如下
def apply_union(x):
## join multiple columns to single sting in row
x = x.apply(lambda row: ' '.join(row.values.astype(str)), axis=1)
## concat rows to single string
x = x.str.cat(sep=" ")
return x
df.groupby("Column1")[["Column2","Column3","Column4"]].apply(lambda x: apply_union(x))
您可以利用最后三列是字符串類型的事實並將它們組合起來,使用總和function 和 column1 上的 groupby,這次使用 python 的字符串連接function 進行聚合:
outcome = (df
.set_index("Column1")
#this helps to put space between
#the columns when summed
.add(' ')
#this combines the columns into one
.sum(axis=1)
.str.rstrip(" ")
.groupby("Column1")
.agg(" ".join)
.reset_index(name='Column2')
)
outcome
Column1 Column2
0 1 I am abc I do business
1 2 I am xyz I do job
2 3 on weekend holidays I do nothing
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.