我在这里问过一个非常相似的问题,不幸的是,玩具问题对我的情况来说太简单了。
我有一个数据框,其中包含两个不同条件下的主题和多个用于不同通道的值列。
d = {
"subject": [1, 1, 2, 2, 3, 3],
"condition": ["on", "off", "on", "off", "on", "off"],
"channel": [1, 1, 1, 1, 1, 2]
"value": [1, 2, 3, 5, 4, 6]
}
df = pd.DataFrame(data=d)
df
| | 主语|条件|通道|价值|
| - ------|- ------|- ------|- ------|- ------|
| 无|1个|在|1个|1个|
| 1个|1个|关闭|1个|第二章|
| 第二章|第二章|在|1个|三个|
| 三个|第二章|关闭|1个|六个|
| 四个|三个|在|1个|四个|
| 五个|三个|关闭|第二章|六个|
我想获得新列,指示两种条件 * 之间的差异 * 关-开 *,每个通道 *。如果一个条件中缺少一个通道,我想获得nan。在这种情况下,我想获得:
| | 主语|条件|通道|价值|值_关-开|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 无|1个|在|1个|1个|1个|
| 1个|1个|关闭|1个|第二章|1个|
| 第二章|第二章|在|1个|三个|三个|
| 三个|第二章|关闭|1个|六个|三个|
| 四个|三个|在|1个|四个|楠|
| 五个|三个|关闭|第二章|六个|楠|
我该怎么做最好?
我不得不尝试在这里扩展解决方案,然而,这会引发错误:
x一个一个一个一个x一个一个二个x
有什么办法?
3条答案
按热度按时间fruv7luv1#
使用
MultiIndex.map
修复现有解决方案或者,您可以使用
merge
:结果
nfs0ujit2#
您可以使用:
注意:如果 Dataframe 尚未按
condition
排序,则必须先按df.sort_values('condition', ascending=False).groupby(...)
排序rmbxnbpk3#
修改my previous answer以使用多列:
输出: