在数据分析中,有时需要根据某些列的值将数据帧中的多行组合在一起。Pandas 是一个非常强大的数据分析库,可以轻松地实现这一点。以下是一些常见的场景和相应的解决方案。
假设我们有以下数据帧:
import pandas as pd
data = {
'Category': ['A', 'A', 'B', 'B', 'C', 'C'],
'Value': [1, 2, 3, 4, 5, 6],
'Description': ['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
}
df = pd.DataFrame(data)
print(df)
输出:
Category Value Description
0 A 1 foo
1 A 2 bar
2 B 3 baz
3 B 4 qux
4 C 5 quux
5 C 6 corge
如果您想根据某一列(例如 Category
)进行分组,并对其他列进行聚合,可以使用 groupby
和 agg
方法。
Value
列求和,对 Description
列进行连接grouped_df = df.groupby('Category').agg({
'Value': 'sum',
'Description': ' '.join
}).reset_index()
print(grouped_df)
输出:
Category Value Description
0 A 3 foo bar
1 B 7 baz qux
2 C 11 quux corge
如果您想将某些列的值合并为列表,可以使用 groupby
和 apply
方法。
Value
和 Description
列合并为列表grouped_df = df.groupby('Category').agg({
'Value': lambda x: list(x),
'Description': lambda x: list(x)
}).reset_index()
print(grouped_df)
输出:
Category Value Description
0 A [1, 2] [foo, bar]
1 B [3, 4] [baz, qux]
2 C [5, 6] [quux, corge]
如果您需要根据多列进行分组,可以在 groupby
中传递一个列表。
Category
和 Description
进行分组,并对 Value
列求和grouped_df = df.groupby(['Category', 'Description']).agg({
'Value': 'sum'
}).reset_index()
print(grouped_df)
输出:
Category Description Value
0 A bar 2
1 A foo 1
2 B baz 3
3 B qux 4
4 C corge 6
5 C quux 5
您还可以定义自己的聚合函数,并在 agg
中使用。
def custom_agg(x):
return ','.join(x)
grouped_df = df.groupby('Category').agg({
'Value': 'sum',
'Description': custom_agg
}).reset_index()
print(grouped_df)
输出:
Category Value Description
0 A 3 foo,bar
1 B 7 baz,qux
2 C 11 quux,corge
领取专属 10元无门槛券
手把手带您无忧上云