pandas 取未打印的 Dataframe 、对象值的平均值

8wtpewkr  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(134)

我有一个数据框如下:
| 日期|时间|美国|五|
| - ------|- ------|- ------|- ------|
| 2023年1月3日|十点二十分零八秒|五个|八个|
| 2023年1月3日|十点二十五分零八秒|第二章|三个|
| 2023年1月3日|十点二十七分零八秒|三个|三个|
| 2023年1月3日|十点二十九分零八秒|六个|六个|
| 2023年1月3日|10点31分08秒|四个|六个|
| 2023年1月3日|十点三十五分零八秒|九|七|
| 2023年1月3日|十点三十七分零八秒|十个|四个|
| 2023年1月3日|十点三十九分零八秒|十一|十二|
我尝试取2个值的平均值,并打印日期、时间、U和V的平均值结果。
我已经这样做了:

data_columns=['Date','Time','U','V']
df3= data.groupby(np.arange(len(data))//2).mean()
print(df3)

然而,我的数值求平均值并打印出来,但我的日期和时间却没有。我知道这一点是因为df. groupby函数只对数值有效,而日期和时间类型是对象。我如何打印日期和时间,以便打印平均值的初始时间。如下所示:

Date | Time |U  | V|
2023-01-03 10:00:21:08 3.5 5.5 
2023-01-03 10:00:27:08 4.5 4.5
2023-01-03 10:00:31:08 6.5 6.5
2023-01-03 10:00:37:08 10.5 8

'**实际上它的... np.排列(len(data)//300).平均值()

2lpgd968

2lpgd9681#

IIUC,groupby()函数用于列名或列名列表,如
groupby('Date')groupby(['Date','Time'])

    • UPDATE**在与@doctorstrange讨论后,我想更新答案。下面的代码尝试创建一个虚拟数据:
import pandas as pd
from datetime import datetime
import time
import random
logfile='log.csv'
c=0

with open(logfile,'a') as handle:
    handle.write('Date,Time,U,V\n')
    while c<=100:
        now=datetime.now()
        D=now.strftime('%Y-%m-%d')
        T=now.strftime('%H:%M:%S:%f')
        u=random.randint(1, 20)
        v=random.randint(1, 20)
        handle.write(f'{D},{T},{u},{v}\n')
        c=c+1
        time.sleep(1)

data是panda的 Dataframe ,如下所示
| | 日期|时间|美国|五|
| - ------|- ------|- ------|- ------|- ------|
| 无|2023年1月13日|11点31分43秒48秒1765|十五|八个|
| 1个|2023年1月13日|十一时三十一分四十四秒四十八万五千六百九十八分|十三|十一|
| 第二章|2023年1月13日|11时31分45秒489秒411|七|十一|
| 三个|2023年1月13日|十一时三十一分四十六秒四十九两五九二|六个|十一|
| 四个|2023年1月13日|11时31分47秒496405分|十八|十七|
| ...|...|...|...|...|
| 九十六|2023年1月13日|11时33分19秒81秒28秒32|十个|五个|
| 九十七|2023年1月13日|11时33分20秒812896分|五个|十五|
| 九十八|2023年1月13日|11时33分21秒816767|十六|九|
| 九十九|2023年1月13日|十一时三十三分二十二秒八十八万五五三|六个|八个|
| 一百|2023年1月13日|十一时三十三分二十三秒八十八万六五一|十三|六个|
数据已写入logfile "log.csv"文件。读入dataframe.data变量。

data=pd.read_csv(logfile)

通过应用组合了DateTimepd.Timestamp.combine()创建新列timestamp

data['timestamp']=data.apply(lambda x: pd.Timestamp.combine(
     datetime.strptime(x['Date'],'%Y-%m-%d')
    ,datetime.strptime(x['Time'],'%H:%M:%S:%f').time()
   ), axis=1)

你会得到这个的
| | 日期|时间|美国|五|时间戳|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 无|2023年1月13日|11点31分43秒48秒1765|十五|八个|2023年1月13日11时31分43.481765秒|
| 1个|2023年1月13日|十一时三十一分四十四秒四十八万五千六百九十八分|十三|十一|2023年1月13日11时31分44.485698秒|
| 第二章|2023年1月13日|11时31分45秒489秒411|七|十一|2023年1月13日11时31分45.489411秒|
| 三个|2023年1月13日|十一时三十一分四十六秒四十九两五九二|六个|十一|2023年1月13日11时31分46.492592秒|
| 四个|2023年1月13日|11时31分47秒496405分|十八|十七|2023年1月13日11时31分47.496405秒|
| ...|...|...|...|...|...|
| 九十六|2023年1月13日|11时33分19秒81秒28秒32|十个|五个|2023年1月13日11时33分19.812832秒|
| 九十七|2023年1月13日|11时33分20秒812896分|五个|十五|2023年1月13日11时33分20.812896秒|
| 九十八|2023年1月13日|11时33分21秒816767|十六|九|2023年1月13日11时33分21.816767秒|
| 九十九|2023年1月13日|十一时三十三分二十二秒八十八万五五三|六个|八个|2023年1月13日11时33分22.818553秒|
| 一百|2023年1月13日|十一时三十三分二十三秒八十八万六五一|十三|六个|2023年1月13日11时33分23.818651秒|
然后,在使用df3变量时,以下代码对timestamp列使用resample()函数和rule='min'(每分钟),并将偏移量设置为0s(零秒)。然后计算mean(),然后重置 Dataframe 索引,将列名设置为U_mean

df3=data.resample(rule='min', on='timestamp', offset='0s').U.mean().reset_index(name='U_mean')
df3

第一个结果是这样的
| | 时间戳|U_平均值|
| - ------|- ------|- ------|
| 无|2023年1月13日11时31分|九二三五二九|
| 1个|2023年1月13日11时32分|十|
| 第二章|2023年1月13日11时33分|八百二十五万|
最后,对于df4V的平均值

df4=data.resample(rule='min', on='timestamp', offset='0s').V.mean().reset_index(name='V_mean')
df4

然后在timestamp上合并df3df4,您将获得最终结果

pd.merge(df3,df4, on='timestamp')

最后,结果是
| | 时间戳|U_平均值|V_平均值|
| - ------|- ------|- ------|- ------|
| 无|2023年1月13日11时31分|九二三五二九|十一一一七六四七|
| 1个|2023年1月13日11时32分|十|十万七千一万六千六百六十七|
| 第二章|2023年1月13日11时33分|八百二十五万|十二五四一六百六十七|
希望这能有所帮助。

相关问题