我有一个带有信息的大熊猫DataFrame
,
df.info()
打印如下,
<class 'pandas.core.frame.DataFrame'>
Int64Index: 6661 entries, 0 to 6660
Data columns (total 3 columns):
value 6661 non-null float64
country 6477 non-null object
outlier 6661 non-null int64
dtypes: float64(1), int64(1), object(1)
memory usage: 208.2+ KB
None
df.columns.values
打印如下,
[u'value' 'country' 'outlier']
df
打印如下,
value country outlier
0 118.66 CHINA 0
1 120.83 CHINA 0
2 86.83 USA 0
3 112.15 CHINA 0
4 113.60 CHINA 0
5 114.32 CHINA 1
6 111.43 CHINA 0
7 117.22 CHINA 1
8 111.43 CHINA 0
- - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -
6652 420.00 USA 0
6653 420.00 USA 0
6654 500.00 USA 0
6655 500.00 USA 0
6656 390.00 USA 1
6657 450.00 USA 0
6658 420.00 USA 0
6659 420.00 USA 1
6660 450.00 USA 0
1
列中outlier
的值被视为outlier
,我想在没有考虑{{1}的情况下为各个国家/地区显示value
}}。我应该提到,outliers
的索引不被考虑,我需要为各个国家编制自己的索引。为了澄清,DF索引2用于美国DF
的数据,它将是美国的索引(2 86.83 USA 0)
数据。 zero
的索引2数据将为China
,依此类推。
我曾尝试使用代码段,但它没有按预期工作。
(3 112.15 CHINA 0)
如何正确地做到这一点?
答案 0 :(得分:1)
我认为您可以首先过滤outlier
为1
的值,然后按pivot
重新整形数据框:
df = df[df.outlier == 1]
df['g'] = df.groupby('country').cumcount()
df = df.pivot(index='g', columns='country', values='value')
print (df)
country CHINA USA
g
0 114.32 390.0
1 117.22 420.0
df.plot()
另一个解决方案是groupby
unstack
:
df = df[df.outlier == 1]
df = df.groupby('country')['value'].apply(lambda x: pd.Series(x.values)).unstack(0)
print (df)
country CHINA USA
0 114.32 390.0
1 117.22 420.0
df.plot()