Python 如何按熊猫中列的部分值进行分组?
我在熊猫数据框中有一些数据,如下所示,我将之前的Python 如何按熊猫中列的部分值进行分组?,python,pandas,Python,Pandas,我在熊猫数据框中有一些数据,如下所示,我将之前的货币和值从CYN(人民币) df.info()打印以下内容: <class 'pandas.core.frame.DataFrame'> Int64Index: 6652 entries, 0 to 6660 Data columns (total 4 columns): currency 6652 non-null object port 6652 non-null object supplier_id
货币
和值
从CYN
(人民币)
df.info()
打印以下内容:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 6652 entries, 0 to 6660
Data columns (total 4 columns):
currency 6652 non-null object
port 6652 non-null object
supplier_id 6652 non-null int64
value 6652 non-null float64
dtypes: float64(1), int64(1), object(2)
memory usage: 259.8+ KB
None
我想根据港口所在国和
目的是以有意义的方式将每个国家的价值清单形象化。我很感激任何关于什么样的图表适合所做工作的建议 您可以使用布尔索引和从数据帧中筛选和选择值。例如,下一行给出以“US”开头的行。你可以随意储存
df.loc[df['port'].str.startswith('US')]
这将为您的国家/地区提供每个国家/地区的数据帧字典
country_values = {}
for key in countries:
country_values[key] = df.loc[df['port'].str.startswith(key, na=False)]
我认为您需要,然后根据或绘制:
但如果出现错误: ValueError:索引包含重复的条目,无法重塑 然后需要一些聚合函数
均值
,求和
。。。(默认函数为“平均值”):
非常感谢,我在这里得到了错误
ValueError:索引包含重复条目,无法重塑
,可能是我有重复的供应商id
。怎么办?请检查答案,我试着解释什么是问题,什么是解决方案。非常感谢乔。我需要改进代码,并在午餐后提出新问题。在那之前要小心。
df.loc[df['port'].str.startswith('US')]
country_values = {}
for key in countries:
country_values[key] = df.loc[df['port'].str.startswith(key, na=False)]
df1 = pd.pivot(index=df['supplier_id'],
columns = df['port'].str[:2].map(COUNTRIES),
values=df['value']).fillna(0)
print (df1)
port CHINA USA
supplier_id
2 111.5884 0.0
5 114.4868 500.0
14 0.0000 420.0
19 121.0082 0.0
35 118.8344 420.0
49 86.9520 0.0
54 112.3130 420.0
55 111.5884 500.0
56 0.0000 420.0
74 0.0000 450.0
81 117.3852 0.0
113 113.7622 420.0
193 0.0000 390.0
231 0.0000 450.0
df1.plot.bar()
df1.plot()
print (df)
currency port supplier_id value
0 USD CNAQG 35 118.8344
1 USD CNAQG 19 121.0082
2 USD CNAQG 49 86.9520
3 USD CNAQG 54 112.3130
4 USD CNAQG 113 113.7622
5 USD CNAQG 5 114.4868
6 USD CNAQG 55 111.5884
7 USD CNAQG 81 117.3852
8 USD CNAQG 2 111.5884
6651 USD USTPA 14 420.0000
6652 USD USTPA 56 420.0000
6653 USD USTPA 113 420.0000
6654 USD USTPA 5 500.0000
6655 USD USTPA 55 500.0000
6656 USD USTPA 193 390.0000
6657 USD USTPA 74 450.0000
6658 USD USTPA 35 420.0000
6659 USD USTPA 54 420.0000
6660 USD USTPA 231 450.0000 <-duplicates for USTPA, 231
6660 USD USTPA 231 800.0000 <-duplicates for USTPA, 231
COUNTRIES = {
"CN": "CHINA",
"US": "USA"
}
df1 = pd.pivot_table(df,
index='supplier_id',
columns = df['port'].str[:2].map(COUNTRIES),
values='value',
aggfunc=np.mean,
fill_value=0)
print (df1)
port CHINA USA
supplier_id
2 111.5884 0
5 114.4868 500
14 0.0000 420
19 121.0082 0
35 118.8344 420
49 86.9520 0
54 112.3130 420
55 111.5884 500
56 0.0000 420
74 0.0000 450
81 117.3852 0
113 113.7622 420
193 0.0000 390
231 0.0000 625 <-mean (450 + 800) /2
df1.plot.bar()
df1 = df.groupby(['supplier_id', df['port'].str[:2].map(COUNTRIES)])['value']
.mean()
.unstack(fill_value=0)
print (df1)
port CHINA USA
supplier_id
2 111.5884 0.0
5 114.4868 500.0
14 0.0000 420.0
19 121.0082 0.0
35 118.8344 420.0
49 86.9520 0.0
54 112.3130 420.0
55 111.5884 500.0
56 0.0000 420.0
74 0.0000 450.0
81 117.3852 0.0
113 113.7622 420.0
193 0.0000 390.0
231 0.0000 625.0