Ano*_*ous 7 python lambda dataframe pandas pandas-groupby
我有一个数据框df和一列,df['table']这样每个项目df['table']都是另一个具有相同标题/列数的数据框。我想知道是否有办法做groupby这样的事情:
原始数据框:
name table
Bob Pandas df1
Joe Pandas df2
Bob Pandas df3
Bob Pandas df4
Emily Pandas df5
Run Code Online (Sandbox Code Playgroud)
分组后:
name table
Bob Pandas df containing the appended df1, df3, and df4
Joe Pandas df2
Emily Pandas df5
Run Code Online (Sandbox Code Playgroud)
我发现这个代码片段可以groupby对数据帧中的字符串执行 a和 lambda,但无法弄清楚如何将整个数据帧附加到groupby.
name table
Bob Pandas df1
Joe Pandas df2
Bob Pandas df3
Bob Pandas df4
Emily Pandas df5
Run Code Online (Sandbox Code Playgroud)
我也试过df['table'] = df.groupby(['name'])['HTML'].apply(list),但给了我df['table']所有的NaN。
谢谢你的帮助!!
import pandas as pd
dfa = pd.DataFrame({'a': [1, 2, 3]})
dfb = pd.DataFrame({'a': ['a', 'b', 'c']})
dfc = pd.DataFrame({'a': ['pie', 'steak', 'milk']})
Run Code Online (Sandbox Code Playgroud)
df = pd.DataFrame({'name': ['Bob', 'Joe', 'Bob', 'Bob', 'Emily'], 'table': [dfa, dfa, dfb, dfc, dfb]})
# print the type for the first value in the table column, to confirm it's a dataframe
print(type(df.loc[0, 'table']))
[out]:
<class 'pandas.core.frame.DataFrame'>
Run Code Online (Sandbox Code Playgroud)
.groupby和聚合list每组的 ,并将 , 中的数据帧list与pd.concat# if there is only one column, or if there are multiple columns of dataframes to aggregate
dfg = df.groupby('name').agg(lambda x: pd.concat(list(x)).reset_index(drop=True))
# display(dfg.loc['Bob', 'table'])
a
0 1
1 2
2 3
3 a
4 b
5 c
6 pie
7 steak
8 milk
# to specify a single column, or specify multiple columns, from many columns
dfg = df.groupby('name')[['table']].agg(lambda x: pd.concat(list(x)).reset_index(drop=True))
Run Code Online (Sandbox Code Playgroud)
list,然后与 组合pd.concat。df.groupby('name')['table'].apply(list)
df.groupby('name').agg(list)
df.groupby('name')['table'].agg(list)
df.groupby('name').agg({'table': list})
df.groupby('name').agg(lambda x: list(x))
Run Code Online (Sandbox Code Playgroud)
StopIteration然而,当进行聚合时,这些都会导致错误dataframes。