Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PANDAS数据帧concat和pivot数据_Python_Pandas_Dataframe - Fatal编程技术网

Python PANDAS数据帧concat和pivot数据

Python PANDAS数据帧concat和pivot数据,python,pandas,dataframe,Python,Pandas,Dataframe,我正在学习python并使用一些示例数据。我有一个数据集的CSV文件,该数据集按美国人口的百分位数按季度列出净值。 我已经成功地将数据按百分位数进行了子集划分,创建了三个按年度划分的净值散点图,三个人口部分各有一个散点图。但是,我试图将这三个图合并到一个数据帧中,这样我就可以将这些线合并到一个图中 数据如下: 迄今为止的守则: import pandas as pd import matplotlib.pyplot as plt # importing numpy as np impor

我正在学习python并使用一些示例数据。我有一个数据集的CSV文件,该数据集按美国人口的百分位数按季度列出净值。 我已经成功地将数据按百分位数进行了子集划分,创建了三个按年度划分的净值散点图,三个人口部分各有一个散点图。但是,我试图将这三个图合并到一个数据帧中,这样我就可以将这些线合并到一个图中

数据如下:

迄今为止的守则:

import pandas as pd

import matplotlib.pyplot as plt
 
# importing numpy as np
import numpy as np
 
df = pd.read_csv("dfa-income-levels.csv")
df99th = df.loc[df['Category']=="pct99to100"]

df99th.plot(x='Date',y='Net worth', title='Net worth by percentile')

dfmid = df.loc[df['Category']=="pct40to60"]

dfmid.plot(x='Date',y='Net worth')
dflow = df.loc[df['Category']=="pct00to20"]

dflow.plot(x='Date',y='Net worth')

data = dflow['Net worth'], dfmid['Net worth'], df99th['Net worth']
headers = ['low', 'mid', '99th']
newdf = pd.concat(data, axis=1, keys=headers)
这会产生如下所示的数据框,这不是我想要用来绘制数据的

    low mid 99th
0   NaN NaN 3514469.0
3   NaN 2503918.0   NaN
5   585550.0    NaN NaN
6   NaN NaN 3602196.0
9   NaN 2518238.0   NaN
... ... ... ...
747 NaN 8610343.0   NaN
749 3486198.0   NaN NaN
750 NaN NaN 32011671.0
753 NaN 8952933.0   NaN
755 3540306.0   NaN NaN

有没有其他方法的建议?

在您共享的csv文件中,我没有看到代码中提到的类别。为了沿着列合并数据帧,可以使用
pd.concat
沿着
axis=1
。它包含相同索引号的列。因此,首先将
Date
列设置为索引,然后将它们合并,然后再次将
Date
作为数据框列返回

  • 要将
    Date
    列设置为数据帧的索引,
    df1=df1.设置索引('Date')
    df2=df2.设置索引('Date')
  • 使用
    df_merge=pd.Concat([df1,df2],axis=1)
    df_merge=pd.merge(df1,df2,on='Date')对数据帧
    df1
    df2
  • 通过
    df\u merge=df\u merge.reset\u index()

我已编辑了您的链接,以包含income-levels.csv。等待批准
#filter you dataframe to only the categories you're interested in
filtered_df = df[df['Category'].isin(['pct99to100', 'pct00to20', 'pct40to60'])]
filtered_df = filtered_df[['Date', 'Category', 'Net worth']]

fig, ax = plt.subplots() #ax is an axis object allowing multiple plots per axis
filtered_df.groupby('Category').plot(ax=ax)