我有一个如下所示的数据框
LIT__0001 LIT__002 AAA__0001 AAA__0002 XYZ
2019-10-31 13:40:00-04:00 NaN 0.014786 10 55 1
2019-10-31 13:45:00-04:00 NaN 0.012143 33 11 2
2019-10-31 13:50:00-04:00 NaN NaN NaN NaN 3
2019-10-31 13:55:00-04:00 NaN 0.020000 14 13 4
2019-10-31 14:00:00-04:00 0.010000 NaN 14 NaN 5
我需要将其转换为如下所示的数据框
LIT AAA XYZ
2019-10-31 13:40:00-04:00 0.014786 10 1
2019-10-31 13:45:00-04:00 0.012143 11 2
2019-10-31 13:50:00-04:00 NaN NaN 3
2019-10-31 13:55:00-04:00 0.020000 13 4
2019-10-31 14:00:00-04:00 0.010000 14 5
也就是说,对于“__”之前具有共同第一个字符的每一列,取每行的最小值。
我的数据框确实很大,所以我希望有更快的解决方案。
最佳答案
使用GroupBy.min
按具有 axis=1
的列和用于拆分的 lambda 函数:
df = df.groupby(lambda x: x.split('__')[0], axis=1, sort=False).min()
或者使用str.split
:
df = df.groupby(df.columns.str.split('__').str[0], axis=1, sort=False).min()
print (df)
LIT AAA XYZ
2019-10-31 13:40:00-04:00 0.014786 10.0 1.0
2019-10-31 13:45:00-04:00 0.012143 11.0 2.0
2019-10-31 13:50:00-04:00 NaN NaN 3.0
2019-10-31 13:55:00-04:00 0.020000 13.0 4.0
2019-10-31 14:00:00-04:00 0.010000 14.0 5.0
关于python - Pandas 数据帧 : Grouping columns having the same first characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58856346/