用增量数字填充数据列值,Python 3.6
Fill Data Column Value with Incremental Number, Python 3.6
我有 Dataframe contains columns + "Order" column,它有整数唯一数字,有些行是零。
我需要从 "Order" 值的最大值用增量数字更新零。
例如:
df['Order'] 的最大值 = 4 并且有 3 条记录 df['Order'] == 0 那么那些值为 0 的 3 行需要填充 5、6、7 .
我尝试了以下脚本:
Dimension_Items = {'Col1':['A', 'B', 'C', 'D', 'E', 'F'], 'Order':[0,2,3,4,0,0]}
Dimension_Items = pd.DataFrame.from_dict(Dimension_Items)
Max_Order = Dimension_Items['Order'].max()
Dimension_Items.loc[Dimension_Items['Order'] == 0, 'Order'] = range(Max_Order+1, len(Dimension_Items)+1)
错误:
Traceback (most recent call last):
Dimension_Items.loc[Dimension_Items['Order'] == 0, 'Order'] = range(Max_Order+1, len(Dimension_Items)+1)
File "C:\Python36\lib\site-packages\pandas\core\indexing.py", line 189, in __setitem__
self._setitem_with_indexer(indexer, value)
File "C:\Python36\lib\site-packages\pandas\core\indexing.py", line 606, in _setitem_with_indexer
raise ValueError('Must have equal len keys and value '
ValueError: Must have equal len keys and value when setting with an iterable
给出错误,请帮助
SPy.
您可以遍历 DataFrame 以查找 Order = 0 的项目,然后将每个 Order 更新为 max_order + 1。试试这个:
import pandas as pd
data = {
'Col1': ['A', 'B', 'C', 'D', 'E', 'F'],
'Order': [0, 2, 3, 4, 0, 0]
}
df = pd.DataFrame(data)
max_order = df['Order'].max()
for i in range(len(df)):
if df.loc[i, 'Order'] == 0:
df.loc[i, 'Order'] = max_order + 1
max_order += 1
df.head()
输出:
Order Value
0 A 5
1 B 2
2 C 3
3 D 4
4 E 6
希望对您有所帮助。
所以我们可以隔离零,然后用列表中的值填充它们,如果我理解正确的话。
l = range(df.Order.max() + 1, df.Order.max() + df.loc[df.Order == 0, 'Order'].size + 1)
df.loc[df.Order == 0, 'Order'] = l
Col1 Order
0 A 5
1 B 2
2 C 3
3 D 4
4 E 6
5 F 7
我有 Dataframe contains columns + "Order" column,它有整数唯一数字,有些行是零。
我需要从 "Order" 值的最大值用增量数字更新零。
例如:
df['Order'] 的最大值 = 4 并且有 3 条记录 df['Order'] == 0 那么那些值为 0 的 3 行需要填充 5、6、7 .
我尝试了以下脚本:
Dimension_Items = {'Col1':['A', 'B', 'C', 'D', 'E', 'F'], 'Order':[0,2,3,4,0,0]}
Dimension_Items = pd.DataFrame.from_dict(Dimension_Items)
Max_Order = Dimension_Items['Order'].max()
Dimension_Items.loc[Dimension_Items['Order'] == 0, 'Order'] = range(Max_Order+1, len(Dimension_Items)+1)
错误:
Traceback (most recent call last):
Dimension_Items.loc[Dimension_Items['Order'] == 0, 'Order'] = range(Max_Order+1, len(Dimension_Items)+1)
File "C:\Python36\lib\site-packages\pandas\core\indexing.py", line 189, in __setitem__
self._setitem_with_indexer(indexer, value)
File "C:\Python36\lib\site-packages\pandas\core\indexing.py", line 606, in _setitem_with_indexer
raise ValueError('Must have equal len keys and value '
ValueError: Must have equal len keys and value when setting with an iterable
给出错误,请帮助
SPy.
您可以遍历 DataFrame 以查找 Order = 0 的项目,然后将每个 Order 更新为 max_order + 1。试试这个:
import pandas as pd
data = {
'Col1': ['A', 'B', 'C', 'D', 'E', 'F'],
'Order': [0, 2, 3, 4, 0, 0]
}
df = pd.DataFrame(data)
max_order = df['Order'].max()
for i in range(len(df)):
if df.loc[i, 'Order'] == 0:
df.loc[i, 'Order'] = max_order + 1
max_order += 1
df.head()
输出:
Order Value
0 A 5
1 B 2
2 C 3
3 D 4
4 E 6
希望对您有所帮助。
所以我们可以隔离零,然后用列表中的值填充它们,如果我理解正确的话。
l = range(df.Order.max() + 1, df.Order.max() + df.loc[df.Order == 0, 'Order'].size + 1)
df.loc[df.Order == 0, 'Order'] = l
Col1 Order
0 A 5
1 B 2
2 C 3
3 D 4
4 E 6
5 F 7