我有以下布尔值表:
pd.DataFrame(data={'val1': [True, False, False, True],
'val2': [False, True, False, True],
'val3': [True, True, False, True],
'val4': [True, False, True, False],
'val5': [True, True, False, False],
'val6': [False, False, True, True]},
index=pd.Series([1, 2, 3, 4], name='index'))
我想创建一个具有相同索引的新数据帧,但每行都有前一列的前三个 True 列名。
如果一行少于三个真值,则新数据帧将具有空值。
您可以使用numpy
argsort
来执行此操作,以根据True
值的位置对列进行切片。
然后使用where
来NaN
是False
的行,以防True
值太少。
import numpy as np
import pandas as pd
# Get the first `N` True columns.
N = 3
arr = df.to_numpy()
data = df.columns.to_numpy()[(~arr).argsort(axis=1, kind='stable')[:, :N]]
mask = np.ones_like(data).cumsum(1) <= arr.sum(1)[:, None]
res = pd.DataFrame(data, columns=[f'TrueVal{i+1}' for i in range(N)],
index=df.index).where(mask)
print(res)
TrueVal1 TrueVal2 TrueVal3
index
1 val1 val3 val4
2 val2 val3 val5
3 val4 val6 NaN
4 val1 val2 val3
尝试使用点
,然后拆分
#df = df.set_index('index')
out = df.dot(df.columns + ',').str[:-1].str.split(',',expand=True).iloc[:,:3]
out
Out[258]:
0 1 2
index
1 val1 val3 val4
2 val2 val3 val5
3 val4 val6 None
4 val1 val2 val3
我有一个字段在熊猫DataFrame被导入为字符串格式。它应该是日期时间变量。如何将其转换为日期时间列,然后根据日期进行筛选。 示例: 数据帧名称:原始数据
请考虑下表:对于每个代码,每一个状态都有一些值。 现在我想以这样的方式转置表,使成为列: 我不能让它工作,只转置那个特定的列。 在熊猫身上实现这一目标的好办法是什么?
问题内容: 我对熊猫有些陌生。我有一个熊猫数据框,它是1行乘23列。 我想将其转换为系列吗?我想知道最pythonic的方法是什么? 我试过了,但是抱怨。它不够聪明,无法意识到它仍然是数学上的“向量”。 谢谢! 问题答案: 它不够聪明,无法意识到它仍然是数学上的“向量”。 可以说它足够聪明,可以识别尺寸差异。:-) 我认为您可以做的最简单的事情是使用位置选择该行,这将为您提供一个Series,其列
我对熊猫有些陌生。我有一个熊猫数据框,是一行23列。 我想把它转换成一个系列?我想知道做这件事最像蟒蛇的方式是什么? 我试过pd。系列(我的结果),但它抱怨。它还没有聪明到意识到它仍然是数学术语中的“向量”。 谢谢!
问题内容: 我有以下熊猫数据框: 我想将日期时间索引转换为数据框的列。我尝试过,但结果没有改变。任何想法? 问题答案: 需要分配输出或参数:
给定如下所示的数据帧 您可能会注意到,这里所有的列都已转换为类型。是否有办法将某些列转换为? 尝试了以下方法 这会引发错误 阅读有关可为空的整数数据类型的信息,然后重试 这会引发错误