我有一个包含单个股票数据的大数据框。 样本:
import pandas as pd
# initialize list of lists
data = [["01.01.2019" , 10, 15, 14 ],["02.01.2019" , 11, 15, 18]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ["Date", 'AAPL', 'MMM', "GS"])
# print dataframe.
df
###Date AAPL MMM GS
0 01.01.2019 10 15 14
1 02.01.2019 11 15 18
现在,我想相应地转换此数据,因此得到以下输出。 应该附加数据值,以及日期变量,并且前几列标题应合并显示在“名称”一列中作为字符串。
# initialize list of lists
data = [["01.01.2019" , 'AAPL', 10],["02.01.2019" , 'AAPL', 11], ["01.01.2019", 'MMM', 15], ["02.01.2019", 'MMM', 15], ["01.01.2019", 'GS', 14], ["02.01.2019", 'GS', 18]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ["Date", 'Name', 'Data'])
# print dataframe.
df
### Date Name Data
0 01.01.2019 AAPL 10
1 02.01.2019 AAPL 11
2 01.01.2019 MMM 15
3 02.01.2019 MMM 15
4 01.01.2019 GS 14
5 02.01.2019 GS 18
这个小样本对我有用的是我无法在整个数据框中使用的东西,因为它太大了。同样,此解决方案也只考虑两家公司。
df_new = df[["Date", "AAPL"]].append(df[["Date", "MMM"]])
df_new["Data"] = df_new.max(axis=1)
df_new["Name"] = "AAPL"
df_new= df_new.reset_index()
df_new.loc[2:3,'Name'] = "MMM"
df_new.drop(df_new.columns[[0, 1, 3]], axis=1, inplace=True)
df_new
### Date Data Name
0 01.01.2019 10.0 AAPL
1 02.01.2019 11.0 AAPL
2 01.01.2019 15.0 MMM
3 02.01.2019 15.0 MMM
我相信这里有解决方案,但是我找不到一个好的解决方案。
谢谢!
答案 0 :(得分:1)
您需要的是melt
的{{1}}功能
pandas