在列中收集数据......并知道它是否出错
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
我的数据格式相当愚蠢,我想让它更合理。
我有很多列来保存问题的答案,比如 "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