如何基于列(obj)将2行组合成pandas中的1行

时间:2018-05-14 07:04:46

标签: python pandas

这是我的数据框信息:

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 4 columns):
A_mean          6 non-null float64
time_range      6 non-null object
time_range_1    6 non-null object
B               6 non-null object
dtypes: float64(1), object(3)

这是df:

df

index    A_mean    time_range    time_range_1    B
0       5.936667       07       08:00 - 08:59   1001
1       5.103241       08       08:00 - 08:59   1001
2       5.267687       09       09:00 - 09:59   1001

我试图将这两行结合起来:

index    A_mean    time_range    time_range_1    B
0       5.936667       07       08:00 - 08:59   1001
1       5.103241       08       08:00 - 08:59   1001

在一行中,所需的输出应如下所示:

index    A_mean    time_range    time_range_1    B
0       5.519954       08       08:00 - 08:59   1001

** P / S:最重要的专栏是A_mean&amp; time_range_1和B列应该保持不变。

我试过.groupby,但我有错误:

df2 = df.groupby('time_range_1')['A_mean'].apply(' '.join).reset_index()

TypeError: sequence item 0: expected str instance, numpy.float64 found

任何解决方案都会以“pythonic”方式(pandas)欣赏。非常感谢你!

2 个答案:

答案 0 :(得分:1)

您可以使用:

df.groupby(['time_range_1', 'B'], as_index=False).agg({'A_mean': 'mean', 'time_range':'last'})

结果:

    time_range_1     B    A_mean  time_range
0  08:00 - 08:59  1001  5.519954           8
1  09:00 - 09:59  1001  5.267687           9

答案 1 :(得分:0)

尝试另一种方式来解决但不是在1个代码中:

df2= df.groupby(df.time_range_1).mean().reset_index()
df2['B'] = '1001'

Output:
index    time_range_1    A_mean      B
0       08:00 - 08:59   5.519954    1001
1       09:00 - 09:59   5.267687    1001