Dataframe 数据帧索引值

Dataframe 数据帧索引值,dataframe,indexing,Dataframe,Indexing,我有一个数据帧 df=pd.DataFrame({'Event1':['Music'、'Poetry'、'treaty'、'smicle'], “事件2”:[诗歌、音乐、舞蹈、戏剧]) 我需要创建一个名为“Val”的新列,该列包含事件2中发生在事件1中的元素的索引。例如,Val将是 “Val”:[1,0,NaN,2]。以下是一种方法: 解决方案1 解决方案2 我得到一个索引错误,索引0超出了大小为0My的轴0的界限。问题是我在Event2中有不在Event1中的元素。我该如何更正???@Nand

我有一个数据帧 df=pd.DataFrame({'Event1':['Music'、'Poetry'、'treaty'、'smicle'], “事件2”:[诗歌、音乐、舞蹈、戏剧])

我需要创建一个名为“Val”的新列,该列包含事件2中发生在事件1中的元素的索引。例如,Val将是
“Val”:[1,0,NaN,2]。

以下是一种方法:

解决方案1

解决方案2


我得到一个索引错误,索引0超出了大小为0My的轴0的界限。问题是我在Event2中有不在Event1中的元素。我该如何更正???@NandaNathan不知道为什么会出现错误,可能是您的数据缺少值。你能检查一下吗?你能用一个解决方案失败的例子来更新这个例子吗?我将很高兴根据需要修改它感谢YOLO…这是更新版本…df=pd.DataFrame({'Event1':['Music'、'Poetry'、'Theatre'、'喜剧']、'Event2':[Poetry、Music、Dance、Theater]})我需要创建一个名为'Val'的新列,该列包含事件1中事件2的元素索引。例如,Val将是“Val”:[1,0,NaN,2]。
import numpy as np

df['val'] = df['Event2'].apply(lambda x: np.where(x == df['Event1'])[0][0]) 

print(df)

    Event1   Event2  val
0    Music   Poetry    1
1   Poetry    Music    0
2  Theatre   Comedy    3
3   Comedy  Theatre    2
df = pd.DataFrame({'Event1':['Music', 'Poetry', 'Theater', 'Comedy'], 'Event2':['Poetry', 'Music', 'Dance', 'Theater']})

df['val'] = (df['Event2']
                 .apply(lambda x: np.argwhere(x == df['Event1']))
                 .apply(lambda x: x[0][0] if len(x)>0 else x)
                )
df['val'] = pd.to_numeric(df['val'], errors='coerce')

print(df)

    Event1   Event2  val
0    Music   Poetry  1.0
1   Poetry    Music  0.0
2  Theater    Dance  NaN
3   Comedy  Theater  2.0