计数行中给定数字内容的同一行中的熊猫,并放入其他数据帧中

问题描述 投票:0回答:1

为我提供图像中的解决方案enter image description here

一年中第几周的我的数据,在第1到52个星期数的值中的一个数据帧中,在No列的其他数据帧中,在计数值中给出其他4列,如图像中可用为我的代码:

import sqlite3
import pandas as pd
import numpy as np
import random as rm
import xlrd

con = sqlite3.connect("db.sqlite3")
df = pd.read_sql_query("select DATE,RF from weather_data",con)
con.close()
df = df.copy()
df = df.loc[:,['date','RF']]
df['Date'] = pd.to_datetime(df['date'], errors='coerce')
df = df.loc[:,['Date','RF']]
df.index = pd.to_datetime(df.index,unit='D')
df = df.asfreq('W').ffill()
df['P'] = df['RF'].apply(lambda x: 1 if x >= 1 else 0)
df = df.loc[:,['Date','P']]
df = df.asfreq('W').ffill()
df.reset_index(drop=True, inplace=True)
df = df.sort_values('Date')
df.reset_index(drop=True, inplace=True)
l = ['year','weekofyear']
df = df.join(pd.concat((getattr(df['Date'].dt, i).rename(i) for i in l), axis=1))
df = df.loc[:,['weekofyear','P']]
df['sec'] = df.P.shift(1)
def analysis(df):
if (df['P'] == 0 and df['sec']==0):
    return 'D/D'
elif (df['P'] == 0 and df['sec']==1):
    return 'D/W'
elif (df['P'] == 1 and df['sec']==0):
    return 'W/D'
elif (df['P'] == 1 and df['sec']==1):
    return 'W/W'
df['N'] = df.apply(analysis,axis = 1)
new = {'NO':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],'D/D':[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],'D/W':[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],'W/D':[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],'W/W':[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}
PR = pd.DataFrame(new,columns=['NO','D/D','D/W','W/D','W/W'])
print(PR)
python pandas
1个回答
0
投票

用途:

df = pd.get_dummies(df.set_index('NO')['P']).sum(level=0).reset_index()
© www.soinside.com 2019 - 2024. All rights reserved.