Python 如何从保持列表顺序的列表向数据帧添加列
我有一个列表a=[‘苹果’、‘橘子’、‘芒果’] 我有一个这样的数据框Python 如何从保持列表顺序的列表向数据帧添加列,python,pandas,list,dataframe,csv,Python,Pandas,List,Dataframe,Csv,我有一个列表a=[‘苹果’、‘橘子’、‘芒果’] 我有一个这样的数据框 APPLE APPLE Orange Orange Mango Mango x. y. x. y. x. y. 1 2 3 3 4 2 : : : : : : 我想对其进行更改,在每第二行之后添加另一个名为FROUT的列,使数据帧如下所示: APPLE APPLE Fruit
APPLE APPLE Orange Orange Mango Mango
x. y. x. y. x. y.
1 2 3 3 4 2
: : : : : :
我想对其进行更改,在每第二行之后添加另一个名为FROUT的列,使数据帧如下所示:
APPLE APPLE Fruit Orange Orange Fruit Mango Mango. Fruit
x. y. APPLE x. y. Orange x. y. Mango
1 2 APPLE 3 3 Orange 4 2 Mango
: : APPLE : : : : Mango
这远不是最好的解决方案,但它是有效的
import pandas as pd
def add_fruit(df, fruits):
new_df = pd.DataFrame()
for fruit in fruits:
df_copy = df[fruit].copy()
df_copy["Fruit"] = [fruit] * len(df.index)
if new_df.empty:
new_df = df_copy
else:
new_df = pd.concat([new_df, df_copy], axis=1, join='inner')
return new_df
fruits = ['APPLE', 'Orange','Mango']
df = pd.DataFrame([['x', 'y', 'x', 'y', 'x', 'y'], [1, 2, 3, 3, 4, 2], [7,8,9,10,11,12]], columns = ['APPLE','APPLE','Orange','Orange','Mango','Mango'])
print(add_fruit(df, fruits))
无论水果的数量或每个水果的列数如何,都可以动态地实现这一点。只需创建一个系列,它将返回我们应该
的列索引。插入列以及水果的名称
您必须找到具有value\u counts()
的相同列名的数量,然后[df.columns.unique()]
就在那里,这样您就可以维持顺序(否则value\u counts
将进行排序,这将在不正确的位置添加列)
然后,添加1,因为您将在每个重复的水果名称后插入一列(这将使每组的列数增加1)
接下来,取累积和减去1,这将为您提供添加列所需的位置
最后,循环通过srs
(使用insert
添加列的位置),并同时循环通过zip
:
这就是srs
的外观,也是动态添加列的循环:
APPLE 2
Orange 5
Mango 8
--
@MartinGustafsson我有一个数据框,不同的数据框有相同的列名columns@MartinGustafsson事实并非如此,但这取决于列的创建方式。例如,您可以不出错地执行此操作:df.columns=['APPLE','APPLE','Orange','Orange','Mango','Mango']
。使用dictionary方法重命名列时会遇到问题,因此这同样取决于操作方式。@DavidErickson感谢您的确认。您知道如何操作吗?@DavidErickson感谢您的解释,“我刚刚学到了这一点。@DavidErickson非常感谢您提供的解决方案。我使用stack/unstack,然后使用列来获取新的数据帧。
# df.columns = ['APPLE', 'APPLE', 'Orange', 'Orange', 'Mango', 'Mango']
srs = (df.columns.value_counts()[df.columns.unique()] + 1).cumsum() - 1
fruit = srs.index
for f, i in zip(fruit, srs):
df.insert(i,f'Fruit{i}',f)
df.columns = df.columns.str.replace('\d+','')
df
Out[1]:
APPLE APPLE Fruit Orange Orange Fruit Mango Mango Fruit
0 x. y. APPLE x. y. Orange x. y. Mango
1 1 2 APPLE 3 3 Orange 4 2 Mango
2 : : APPLE : : Orange : : Mango