Python 创建单行数据帧
我在Pandas(Python3.7)中有以下数据帧 我希望在一个新的数据帧中有一行输出,例如Python 创建单行数据帧,python,python-3.x,pandas,Python,Python 3.x,Pandas,我在Pandas(Python3.7)中有以下数据帧 我希望在一个新的数据帧中有一行输出,例如 CH_SYMBOL mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE CH_TRADE_HIGH_PRICE CH_TRADE_LOW_PRICE WIPRO 9-Jan-2020 254.25 253.65 256.50 252.65 08-Jan-2020 254.00 254.80 256.15 252.55 07-J
CH_SYMBOL mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE CH_TRADE_HIGH_PRICE CH_TRADE_LOW_PRICE
WIPRO 9-Jan-2020 254.25 253.65 256.50 252.65 08-Jan-2020 254.00 254.80 256.15 252.55 07-Jan-2020 253.25 255.20 256.35 250.20 ....
我的代码是
import requests
import json
import pandas as pd
from datetime import datetime
from datetime import timedelta
pd.options.display.float_format = '{:,.2f}'.format
symbol1="WIPRO"
url='https://nseindia.com/api/historical/cm/equity?symbol=INFY&series=["EQ"]&from=02-01-2020&to=09-01-2020'
url_hist=url.replace('INFY', symbol1)
print(url_hist)
tdt = datetime.today()
print(tdt)
fromdt=tdt+timedelta(-5)
todt=tdt+timedelta(-1)
print(fromdt.strftime("%d-%m-%Y"))
print(todt.strftime("%d-%m-%Y"))
url=url_hist
headers = { "Accept-Encoding":"gzip, deflate","Accept-Language":"en-US,en;q=0.9",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.78"}
r=requests.get(url, headers=headers).json()
df1=pd.DataFrame().from_records(r["data"])
df2=df1[['CH_SYMBOL','mTIMESTAMP','CH_OPENING_PRICE','CH_CLOSING_PRICE','CH_TRADE_HIGH_PRICE','CH_TRADE_LOW_PRICE']]
df2
因为我需要新的数据帧,所以像WIPRO或INFY这样的符号可以用来与另一个数据帧合并
Pl帮助
感谢您在df上使用展平()方法:更新
list_columns = df.columns[1:]
new_df = (df.assign(count = 'ROW_' + df.groupby('CH_SYMBOL')
.cumcount()
.astype(str)
)
.pivot_table(columns = 'count',
values = list_columns,
aggfunc = 'first',
index = 'CH_SYMBOL')
.swaplevel(axis=1)
.sort_index(axis=1)
.reindex(columns = list_columns,level = 1)
.rename_axis(columns = [None,None],index = None))
print(new_df)
输出
ROW_0 \
mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE CH_TRADE_HIGH_PRICE
WIPRO 09-Jan-2020 254.25 253.65 256.5
ROW_1 \
CH_TRADE_LOW_PRICE mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE
WIPRO 252.65 08-Jan-2020 254.0 254.8
... ROW_4 \
CH_TRADE_HIGH_PRICE CH_TRADE_LOW_PRICE ... mTIMESTAMP
WIPRO 256.15 252.55 ... 03-Jan-2020
\
CH_OPENING_PRICE CH_CLOSING_PRICE CH_TRADE_HIGH_PRICE
WIPRO 249.5 251.1 252.7
ROW_5 \
CH_TRADE_LOW_PRICE mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE
WIPRO 247.35 02-Jan-2020 246.6 248.3
CH_TRADE_HIGH_PRICE CH_TRADE_LOW_PRICE
WIPRO 249.9 246.35
[1 rows x 30 columns]
如果不使用
多索引
,则应重复列的名称
new_df.columns = new_df.columns.droplevel(0)
print(new_df)
mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE CH_TRADE_HIGH_PRICE \
WIPRO 09-Jan-2020 254.25 253.65 256.5
CH_TRADE_LOW_PRICE mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE \
WIPRO 252.65 08-Jan-2020 254.0 254.8
CH_TRADE_HIGH_PRICE CH_TRADE_LOW_PRICE ... mTIMESTAMP \
WIPRO 256.15 252.55 ... 03-Jan-2020
CH_OPENING_PRICE CH_CLOSING_PRICE CH_TRADE_HIGH_PRICE \
WIPRO 249.5 251.1 252.7
CH_TRADE_LOW_PRICE mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE \
WIPRO 247.35 02-Jan-2020 246.6 248.3
CH_TRADE_HIGH_PRICE CH_TRADE_LOW_PRICE
WIPRO 249.9 246.35
[1 rows x 30 columns]
为什么要将数据帧转换为空格分隔的字符串?谢谢,但我希望在数据帧WIPRO 9-Jan-2020 254.25 253.65 256.50 252.65 08-Jan-2020 254.00 254.80 256.15 252.55 07-Jan-2020 253.25中输出。。。这样,WIPRO应该只出现一次,并将用于与另一个DataFramePerfect合并,您能解释一下您所做的吗?我需要时间才能达到你的水平
new_df.columns = new_df.columns.droplevel(0)
print(new_df)
mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE CH_TRADE_HIGH_PRICE \
WIPRO 09-Jan-2020 254.25 253.65 256.5
CH_TRADE_LOW_PRICE mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE \
WIPRO 252.65 08-Jan-2020 254.0 254.8
CH_TRADE_HIGH_PRICE CH_TRADE_LOW_PRICE ... mTIMESTAMP \
WIPRO 256.15 252.55 ... 03-Jan-2020
CH_OPENING_PRICE CH_CLOSING_PRICE CH_TRADE_HIGH_PRICE \
WIPRO 249.5 251.1 252.7
CH_TRADE_LOW_PRICE mTIMESTAMP CH_OPENING_PRICE CH_CLOSING_PRICE \
WIPRO 247.35 02-Jan-2020 246.6 248.3
CH_TRADE_HIGH_PRICE CH_TRADE_LOW_PRICE
WIPRO 249.9 246.35
[1 rows x 30 columns]