我如何才能到达- Input -Input下方和输出-Output我尝试使用shift,但没有得到结果
df1['Value_shift_down'] = df1['Value'].shift(-1) df1['Value_shift_up'] = df1['Value'].shift(1)
gmxoilav1#
Pandas.shift()的应用是正确的,不用在字符串和整数之间来回转换,可以利用shift将每个值与前一个值进行比较,然后使用累积和(.cumsum())来检测值何时改变。最后一个元素是DataFrame .groupby() method,它允许我们将相同的-Value行集合在一起,并获得该组的起始和结束Unit。
.shift()
shift
.cumsum()
.groupby()
Value
Unit
result_groups = [] for _, group in df1.groupby((df1["Value"] != df1["Value"].shift()).cumsum()): start_unit = group.loc[group.index.min(), "Unit"] end_unit = group.loc[group.index.max(), "Unit"] value = group["Value"].unique()[0] result_groups.append({"Start_Unit": start_unit, "End_Unit": end_unit, "Value": value}) results = pd.DataFrame(result_groups)
results数据框如下所示(根据需要):| | * * 开始单位**|* * 结束单位**|* * 价值**|| - ------|- ------|- ------|- ------|| 无|第一单元|第一单元|第二章|| 1个|第二单元|第二单元|四个|| 第二章|第三单元|第三单元|1个|| 三个|第四单元|第五单元|五个|| 四个|第六单元|第六单元|七|| 五个|第七单元|第七单元|六个|| 六个|第八单元|第八单元|九|| 七|第九单元|第二十单元|无|注意:这个解决方案不要求'Value'列中的值在一个组一个组的基础上是唯一的(即,如果以后有另一个5序列,它会正确地将其识别为一个新组)。如果您提前知道这种情况永远不会发生,您可以采取一个更简单的方法,只使用df1.groupby("Value"),并在循环中做类似的事情。
results
'Value'
5
df1.groupby("Value")
eeq64g8w2#
基于字符串确定最小值和最大值是不可能的(因为“10”小于“2”)。因此,您需要用整数替换字符串。因此,一个解决方案可能是删除单元名称,并将单元名称数字转换为整数,然后您可以通过透视表确定最小值和最大值。
df['Unit'] = df['Unit'].str.replace('Unit ', '', regex=False).astype(int) df.pivot_table(index='Value', values='Unit', aggfunc=['min', 'max'])
如有必要,您可以随后将值转换回字符串并添加单元名称。
2条答案
按热度按时间gmxoilav1#
Pandas
.shift()
的应用是正确的,不用在字符串和整数之间来回转换,可以利用shift
将每个值与前一个值进行比较,然后使用累积和(.cumsum()
)来检测值何时改变。最后一个元素是DataFrame.groupby()
method,它允许我们将相同的-Value
行集合在一起,并获得该组的起始和结束Unit
。results
数据框如下所示(根据需要):| | * * 开始单位**|* * 结束单位**|* * 价值**|
| - ------|- ------|- ------|- ------|
| 无|第一单元|第一单元|第二章|
| 1个|第二单元|第二单元|四个|
| 第二章|第三单元|第三单元|1个|
| 三个|第四单元|第五单元|五个|
| 四个|第六单元|第六单元|七|
| 五个|第七单元|第七单元|六个|
| 六个|第八单元|第八单元|九|
| 七|第九单元|第二十单元|无|
注意:这个解决方案不要求
'Value'
列中的值在一个组一个组的基础上是唯一的(即,如果以后有另一个5
序列,它会正确地将其识别为一个新组)。如果您提前知道这种情况永远不会发生,您可以采取一个更简单的方法,只使用df1.groupby("Value")
,并在循环中做类似的事情。eeq64g8w2#
基于字符串确定最小值和最大值是不可能的(因为“10”小于“2”)。因此,您需要用整数替换字符串。
因此,一个解决方案可能是删除单元名称,并将单元名称数字转换为整数,然后您可以通过透视表确定最小值和最大值。
如有必要,您可以随后将值转换回字符串并添加单元名称。