Pandas DataFrame基于值获取头名称

2024-04-18 00:53:12 发布

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

我有一个Pandas数据帧,如下所示-我使用Python Pandas。在

+------------+---------+---------+----------+--------+
| Movie Name | English | Chinese | Japanese | Korean |
+------------+---------+---------+----------+--------+
| A          |       1 |       0 |        0 |      0 |
| B          |       0 |       1 |        1 |      0 |
| C          |       0 |       1 |        1 |      1 |
| D          |       1 |       0 |        0 |      0 |
| E          |       0 |       1 |        0 |      0 |
+------------+---------+---------+----------+--------+

我想像下面这样转换它,通过基于值(0或1)连接头名称

预期输出

^{pr2}$

Tags: 数据name名称pandasenglishmoviekoreanchinese
3条回答

IIUC,melt然后问题变成了groupby问题

s=df.melt('MovieName').query('value==1').groupby('MovieName').variable.agg(','.join)
df['New']=df.MovieName.map(s)
df
Out[690]: 
  MovieName  English           ...             Korean                      New
0         A        1           ...                  0                  English
1         B        0           ...                  0         Chinese,Japanese
2         C        0           ...                  1  Chinese,Japanese,Korean
3         D        1           ...                  0                  English
4         E        0           ...                  0                  Chinese
[5 rows x 6 columns]

首先通过^{}创建索引,然后使用^{}进行1的矩阵乘法,最后用^{}^{}删除最后一个,,用于2列DataFrame

df = df.set_index('Movie Name')
df1 = df.dot(df.columns + ',').str.rstrip(',').reset_index(name='Languages')
print (df1)
  Movie Name                Languages
0          A                  English
1          B         Chinese,Japanese
2          C  Chinese,Japanese,Korean
3          D                  English
4          E                  Chinese

您可以使用:

df['langauges'] = (df.eq(1)*df.columns).apply(lambda x : ','.join(x), axis = 1).str.strip(',')
df

 Movie Name English Chinese Japanese    Korean  langauges
0     A       1       0        0          0      English
1     B       0       1        1          0      Chinese,Japanese
2     C       0       1        1          1      Chinese,Japanese,Korean
3     D       1       0        0          0      English
4     E       0       1        0          0      Chinese

相关问题 更多 >

    热门问题