将melt和groupby结合在一起

2024-04-19 22:59:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的df

country       country_abbr region year v1       v2      v3      ... v100
India         IN            IND   1999 327.0    7058.0  8856.0  ... 7900.0
Saint Lucia   LC            LCA   1990 NaN      NaN     NaN     ... NaN
Samoa         WS            WSM   1985 NaN      NaN     NaN     ... NaN
Somalia       SO            SOM   1999 136.0    643.0   678.0   ... 175.0

我正在寻找一种简单的方法,将所有vi变量折叠成单个变量v(将表从宽转换为长),然后创建一个新列,以通过countryv保存vi的值

我试过这样的东西:

col_vals = df.columns.difference(['country', 'country_abbr', 'region', 'year'])
df2 = melt(df, col_vals, 'v', 'count')
df2['count'].astype(int)

但我注意到我的很多数据丢失了,我不知道为什么

编辑以添加预期输出:

country     year    v   count
India       1999    v1  327.0
India       1999    v2  7058.0
India       1999    v3  8856.0
Somalia     1999    v1  136.0
Somalia     1999    v2  643.0
Somalia     1999    v3  678.0

2条回答

这就是你的想法吗

(df.melt(["country", "country_abbr", "region", "year"], 
         var_name="v")
 .dropna()
 .sort_values("country"))

    country country_abbr    region  year    v       value
0   India   IN               IND    1999    v1      327.0
4   India   IN               IND    1999    v2      7058.0
8   India   IN               IND    1999    v3      8856.0
12  India   IN               IND    1999    v100    7900.0
3   Somalia SO               SOM    1999    v1      136.0
7   Somalia SO               SOM    1999    v2      643.0
11  Somalia SO               SOM    1999    v3      678.0
15  Somalia SO               SOM    1999    v100    175.0
pd.wide_to_long(df, ["v"], i = ["country", "country_abbr", "region", "year"], j ="V").rename(columns = {'v':'Count'})

我想这就是你的意思,但我不是100%确定,请让我知道你所说的计数列是否就是这个意思

相关问题 更多 >