在列中收集数据......并知道它是否出错

Collecting together data in columns... and knowing if it goes wrong

我的数据格式相当愚蠢,我想让它更合理。

我有很多列来保存问题的答案,比如 "What's your favourite food?"

      Bolognese    Chips    Salad    Burgers
0                  Chips
1     Bolognese
2                                    Burgers
3                                    Burgers
4                  Chips

首先,我想就如何将这些列折叠成一个列提出一些建议:

      Fav food
0     Chips
1     Bolognese
2     Burgers
3     Burgers
4     Chips

这些列中的答案是相互排斥的,因此不应有包含两个答案的任何行。确定的最佳方法是什么?我是否只查看用于折叠列的代码是否引发错误?我应该在折叠它们之前检查列之间的排他性吗?有公认的方法吗?

您可以在 axis=1

的行上使用 max
In [986]: df.max(axis=1)
Out[986]:
0        Chips
1    Bolognese
2      Burgers
3      Burgers
4        Chips
dtype: object

看来你需要先 fillna if NaN in df and then apply join or sum:

print (df.fillna('').apply(''.join, axis=1))
0        Chips
1    Bolognese
2      Burgers
3      Burgers
4        Chips
dtype: object

print (df.fillna('').sum(axis=1))
0        Chips
1    Bolognese
2      Burgers
3      Burgers
4        Chips
dtype: object

first_valid_index 的另一种解决方案 - 从列名中获取值:

print (df.apply(lambda x: x.first_valid_index(), axis=1))
0        Chips
1    Bolognese
2      Burgers
3      Burgers
4        Chips
dtype: object