我有一个看起来像这样的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
(将表从宽变长),然后创建一个新列来保存值vi
和country
中v
的数量。
我尝试过这样的事情:
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
答案 0 :(得分:0)
pd.wide_to_long(df, ["v"], i = ["country", "country_abbr", "region", "year"], j ="V").rename(columns = {'v':'Count'})
我认为这就是您的意思,但我不确定100%,请让我知道您的“计数”列是否意味着您。
答案 1 :(得分:0)
这是您的主意吗?
(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