Pandas是Python中非常流行的数据分析库,其中的DataFrame是一种类似于电子表格的数据结构。在处理数据时,经常需要针对不同的分组/分割/合并需求进行处理。
分组
按列值分组
DataFrame.groupby()
方法可用于按一列或多列的值分组,并执行其他操作。下面是一个示例:
import pandas as pd
# 创建一个DataFrame
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': [1, 2, 3, 4, 5, 6, 7, 8],
'D': [2, 4, 6, 8, 10, 12, 14, 16]
})
# 按列A的值分组,并计算平均值
df.groupby('A').mean()
输出结果为:
C D
A
bar 4.0 8.0
foo 4.6 10.4
按多列值分组
也可以按多列的值进行分组:
# 按列A和B的值分组,并计算平均值
df.groupby(['A', 'B']).mean()
输出结果为:
C D
A B
bar one 2.0 4.0
three 4.0 8.0
two 6.0 12.0
foo one 4.0 9.0
three 8.0 16.0
two 4.0 7.0
分割
根据布尔条件分裂
DataFrame.groupby()
方法也可以与布尔条件一起使用,实现类似于where
语句的功能,并将数据分成两个组:
# 根据列A是否为'foo'分裂数据
grouped = df.groupby(lambda x: x.startswith('foo'))
# 打印分裂后的两个组
for name, group in grouped:
print(name)
print(group)
输出结果为:
False
A B C D
1 bar one 2 4
3 bar three 4 8
5 bar two 6 12
True
A B C D
0 foo one 1 2
2 foo two 3 6
4 foo two 5 10
6 foo one 7 14
7 foo three 8 16
根据行数分裂
在处理数据时,还经常需要根据行数对数据进行分割,这时可以使用np.array_split()
方法:
import numpy as np
# 将DataFrame按行均分成3组
groups = np.array_split(df, 3)
# 打印分组后的前两个组
for group in groups[:2]:
print(group)
输出结果为:
A B C D
0 foo one 1 2
1 bar one 2 4
2 foo two 3 6
3 bar three 4 8
A B C D
4 foo two 5 10
5 bar two 6 12
合并
按索引合并
Pandas提供了若干种方法用于按索引合并数据,其中DataFrame.join()
方法可用于合并两个DataFrame,并按照它们的索引对数据进行匹配:
# 创建另外一个DataFrame
df2 = pd.DataFrame({
'E': [9, 10, 11, 12, 13, 14, 15, 16]
})
# 通过列A和索引进行合并,合并方式为内部连接
df3 = df.set_index('A').join(df2)
输出结果为:
B C D E
A
bar one 2 4 10
bar three 4 8 10
bar two 6 12 10
foo one 1 2 11
foo one 7 14 11
foo three 8 16 11
foo two 3 6 9
foo two 5 10 9
按列合并
DataFrame.concat()
方法可用于将若干个DataFrame按列合并:
# 创建另外一个DataFrame
df4 = pd.DataFrame({
'F': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
})
# 按列合并两个DataFrame
df5 = pd.concat([df, df4], axis=1, sort=False)
输出结果为:
A B C D F
0 foo one 1 2 A
1 bar one 2 4 B
2 foo two 3 6 C
3 bar three 4 8 D
4 foo two 5 10 E
5 bar two 6 12 F
6 foo one 7 14 G
7 foo three 8 16 H
以上就是Pandas中DataFrame的分组/分割/合并的实现过程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas中DataFrame的分组/分割/合并的实现 - Python技术站