【问题标题】:How to repeatedly loop through list to assign values如何重复循环遍历列表以分配值
【发布时间】:2019-11-18 11:29:49
【问题描述】:

我有两个熊猫数据框。在 df1 我有一个字符串列,其中包含一个有限的唯一值列表。我想让这些值成为一个列表,然后循环并在 df2 上附加一个新列。该值将遍历列表,然后在第二个数据帧的整个范围内重新开始。

df1
    my_value
0       A
1       B
2       C

df2
    color
0   red
1   orange
2   yellow
3   green
4   blue
5   indigo
6   violet
7   maroon
8   brown
9   black

What I want
    color          my_value
0   red             A
1   orange          B
2   yellow          C
3   green           A
4   blue            B
5   indigo          C
6   violet          A
7   maroon          B
8   brown           C
9   black           A

#create list
my_list = pd.Series(df1.my_value.values).to_list()

# create column
my_new_column = []

for i in range(len(df2)):
    assigned_value = my_list[i]

    my_new_column.append(assigned_value)

df2['my_new_column'] = my_new_column

return df2

列表索引和范围的长度不同,这就是我要挂断的地方。

这非常直接,我完全忽略了解决方案,如果在其他地方得到回答,请随时将我链接到另一个问题。感谢您的输入!

【问题讨论】:

  • df['new'] = (df.index % 3).map({0:"A",1:"B",2:"C"})
  • 谢谢!我一直在玩弄 mod。您的答案最终奏效了,只是替换了地图中的列,而不是显式调用值。

标签: python python-3.x pandas for-loop


【解决方案1】:
#You can use zip with itertools.cycle() to cycle thru the smallest list/Series

df1 = pd.Series(data=['a','b','c'],name='my_values')
df2 = pd.Series(data= 'red','orange','yellow','green','blue','indigo','violet','maroon','brown','black'], name='color')

import itertools

df2 = pd.concat([df2, pd.Series([b for a,b in zip(df2 , itertools.cycle(df1))], name='my_value')],axis=1)
df2


   color    my_value
0   red     a
1   orange  b
2   yellow  c
3   green   a
4   blue    b
5   indigo  c
6   violet  a
7   maroon  b
8   brown   c
9   black   a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-28
    • 2012-04-01
    • 2019-06-15
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多