python - 从包含一个值的最右侧列中获取值并存储在新列中?
问题描述
以下是当前示例 df。
+-------+---+---+----+---+---+---+
| name | 1 | 2 | 3 | 4 | 5 | 6 |
+-------+---+---+----+---+---+---+
| mark | a | b | c | d | | |
| joe | a | b | | | | |
| bob | a | b | c | d | e | f |
| luke | a | | | | | |
| hana | a | b | d | | | |
| kelly | a | b | c | | | |
+-------+---+---+----+---+---+---+
我想要的输出如下,“最终”列从包含值的最右侧列中提取值。
+-------+---+---+----+---+---+---+-------+
| name | 1 | 2 | 3 | 4 | 5 | 6 | final |
+-------+---+---+----+---+---+---+-------+
| mark | a | b | c | d | | | d |
| joe | a | b | | | | | b |
| bob | a | b | c | d | e | f | f |
| luke | a | | | | | | a |
| hana | a | b | c | | | | c |
| kelly | a | b | c | | | | c |
+-------+---+---+----+---+---+---+-------+
我尝试使用以下 if 语句(以及其他一千种东西),但它似乎不起作用......
if df['2'].isna == True:
df['final']=df['1']
elif df['2'].isna == False and df['3'].isna == True:
df['final']=df['2']
我想我需要在这里使用一个函数?但是经过几个小时的阅读堆栈溢出和实验后,我被困住了。
解决方案
您需要创建函数,apply
该函数将根据上下文长度取值。
import pandas as pd
df = pd.DataFrame({'name':['m','j','k'], 1:['a','a','a'], 2:['b','b',''], 3:['c','','']})
def function(row):
if len(row[3]) > 0:
return row[3]
elif len(row[2]) > 0:
return row[2]
else:
return row[1]
df['final'] = df.apply(function, axis=1)
输出:
name 1 2 3 final
0 m a b c c
1 j a b b
2 k a a
推荐阅读
- optimization - 斯坦纳树和完全图之间的图
- r - R 创建函数来运行许多假设检验
- angular - 如何解决错误上下文在离子/角度中调试上下文
- mysql - 关于更新子/父表的 MYSQL 错误
- react-native - 有没有办法获得 react-native-swiper 的滑动进度?
- python - 如何避免此熊猫数据帧处理的迭代
- android - 更改 recyclerview 的视图中按钮的可见性(使用卡片视图)
- reactjs - 如何根据 React 中的 3 个条件更改表格行颜色
- python - 如何将作为字典的列表元素取消嵌套到数据框中(使用它的第一个值作为前缀)
- python - Python中的阶乘函数,为什么我必须从1到k+1?